Heim Web-Frontend js-Tutorial 做好七件事帮你提升jQuery的性能_jquery

做好七件事帮你提升jQuery的性能_jquery

May 16, 2016 pm 05:01 PM
jquery 性能

1. Append Outside of Loops

凡是触及到DOM都是有代价的。如果你向DOM当中附加大量的元素,你会想一次性将它们全部附加进来,而不是分多次进行。当在循环当中附加元素就会产生一个常见的问题。

复制代码 代码如下:

$.each( myArray, function( i, item ) {
    var newListItem = "
  • " + item + "
  • ";
        $( "#ballers" ).append( newListItem );
    });

    一个常用的技巧是利用文档片段(document fragment)。在循环的每一次迭代当中,将元素附加到片段而不是DOM元素当中。当循环结束后,将片段附加到DOM元素当中即可。

    复制代码 代码如下:

    var frag = document.createDocumentFragment();

    $.each( myArray, function( i, item ) {

        var newListItem = document.createElement( "li" );
        var itemText = document.createTextNode( item );

        newListItem.appendChild( itemText );

        frag.appendChild( newListItem );

    });

    $( "#ballers" )[ 0 ].appendChild( frag );

    另一个简单的技巧是在循环的每次迭代当中,持续构建一个字符串。当循环结束后,将DOM元素的HTML设置成该字符串。

    复制代码 代码如下:

    var myHtml = "";

    $.each( myArray, function( i, item ) {

        myHtml += "

  • " + item + "
  • ";

    });

    $( "#ballers" ).html( myHtml );

    当然还有其它一些技巧可以供你尝试。一个名为 jsperf 的站点为测试这些性能提供了一条好的出路。该网站允许你使用基准测试每一个技巧,并将其跨平台的性能测试结果可视化的展现出来。

    2. Cache Length During Loops

    在for循环当中,不要每次都访问数组的 length 属性;应当事先将其缓存起来。

    复制代码 代码如下:

    var myLength = myArray.length;

    for ( var i = 0; i

        // do stuff

    }

    3. Detach Elements to Work with Them

    操作DOM是缓慢的,因此你想尽可能减少对齐进行操作。jQuery在1.4版本当中引入了名为 detach() 的方法来帮助解决这一问题,它允许你在对元素进行操作时,将它们从DOM当中分离出来。

    复制代码 代码如下:

    var $table = $( "#myTable" );
    var $parent = $table.parent();

    $table.detach();

    // ... add lots and lots of rows to table

    $parent.append( $table );

    4. Don't Act on Absent Elements

    如果你正打算在一个空的选择器上运行大量的代码,jQuery并不会给予任何的提示 -- 它将会继续的执行,就像是没有发生任何的错误。必须由你来验证选择器包含了多少元素。

    复制代码 代码如下:

    // Bad: This runs three functions before it
    // realizes there's nothing in the selection
    $( "#nosuchthing" ).slideUp();

    // Better:
    var $mySelection = $( "#nosuchthing" );

    if ( $mySelection.length ) {

        $mySelection.slideUp();

    }

    // Best: Add a doOnce plugin.
    jQuery.fn.doOnce = function( func ) {

        this.length && func.apply( this );

        return this;

    }

    $( "li.cartitems" ).doOnce(function() {


        // make it ajax! \o/


    });

    本指南特别适用于那些当选择器不包含元素时还需要大量的开销的 jQuery UI 部件。

    5. Optimize Selectors

    选择器的优化和过去比起来并不是那么的重要,因为很多浏览器都实现了 document.querySelectorAll() 方法并且jQuery将选择器的负担转移到了浏览器上面。但是仍然有一些技巧需要铭记在心。

    基于ID的选择器

    以一个ID作为选择器的开始总是最好的。

    复制代码 代码如下:

     // Fast:
     $( "#container div.robotarm" );

     // Super-fast:
     $( "#container" ).find( "div.robotarm" );

    采用 .find() 方法的方式将更加的快速,因为第一个选择器已经过处理,而无需通过嘈杂的选择器引擎 -- ID-Only的选择器已使用 document.getElementById() 方法进行处理,之所以快速,是因为它是浏览器的原生方法。

    特异性

    尽量详细的描述选择器的右侧,对于左侧则应反其道而行之。

    复制代码 代码如下:

     // Unoptimized:
     $( "div.data .gonzalez" );

     // Optimized:
     $( ".data td.gonzalez" );

    尽量在选择器的最右侧使用 tag.class 的形式来描述选择器,而在左侧则尽量只使用 tag 或者 .class 。

    避免过度使用特异性

    复制代码 代码如下:

     $( ".data table.attendees td.gonzalez" );

     // Better: Drop the middle if possible.
     $( ".data td.gonzalez" );

    去讨好“DOM”总是有利于提升选择器的性能,因为选择器引擎在搜寻元素时无需进行太多的遍历。

    避免使用通用选择器

    如果一个选择器明确或暗示它能在不确定的范围内进行匹配将会大大影响性能。

    复制代码 代码如下:

     $( ".buttons > *" ); // Extremely expensive.
     $( ".buttons" ).children(); // Much better.

     $( ".category :radio" ); // Implied universal selection.
     $( ".category *:radio" ); // Same thing, explicit now.
     $( ".category input:radio" ); // Much better.
     Use Stylesheets for Changing CSS on Many Elements

    假如你使用 .css() 方法来改变超过20个元素的CSS,应当考虑为页面添加一个样式标签作为替代,这样做可以提升将近60%的速度。

    复制代码 代码如下:

     // Fine for up to 20 elements, slow after that:
     $( "a.swedberg" ).css( "color", "#0769ad" );

     // Much faster:
     $( "")
         .appendTo( "head" );
     Don't Treat jQuery as a Black Box

    把jQuery的源码当成文档,可以把它(http://bit.ly/jqsource)保存在你的收藏夹内,经常的查阅参考。

    Erklärung dieser Website
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

    Heiße KI -Werkzeuge

    Undresser.AI Undress

    Undresser.AI Undress

    KI-gestützte App zum Erstellen realistischer Aktfotos

    AI Clothes Remover

    AI Clothes Remover

    Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

    Undress AI Tool

    Undress AI Tool

    Ausziehbilder kostenlos

    Clothoff.io

    Clothoff.io

    KI-Kleiderentferner

    AI Hentai Generator

    AI Hentai Generator

    Erstellen Sie kostenlos Ai Hentai.

    Heißer Artikel

    R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
    2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
    Repo: Wie man Teamkollegen wiederbelebt
    4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
    Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
    3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

    Heiße Werkzeuge

    Notepad++7.3.1

    Notepad++7.3.1

    Einfach zu bedienender und kostenloser Code-Editor

    SublimeText3 chinesische Version

    SublimeText3 chinesische Version

    Chinesische Version, sehr einfach zu bedienen

    Senden Sie Studio 13.0.1

    Senden Sie Studio 13.0.1

    Leistungsstarke integrierte PHP-Entwicklungsumgebung

    Dreamweaver CS6

    Dreamweaver CS6

    Visuelle Webentwicklungstools

    SublimeText3 Mac-Version

    SublimeText3 Mac-Version

    Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

    Vergleicht man die Leistung von Win11- und Win10-Systemen: Welches ist besser? Vergleicht man die Leistung von Win11- und Win10-Systemen: Welches ist besser? Mar 27, 2024 pm 05:09 PM

    Das Windows-Betriebssystem war schon immer eines der am weitesten verbreiteten Betriebssysteme auf PCs, und Windows 10 war lange Zeit das Flaggschiff-Betriebssystem von Microsoft, bis Microsoft vor kurzem das neue Windows 11-System auf den Markt brachte. Mit der Einführung des Windows 11-Systems haben sich die Menschen für die Leistungsunterschiede zwischen Windows 10 und Windows 11-Systemen interessiert. Welches ist besser? Werfen wir zunächst einen Blick auf W

    Leistungsvergleich Windows 10 vs. Windows 11: Welches ist besser? Leistungsvergleich Windows 10 vs. Windows 11: Welches ist besser? Mar 28, 2024 am 09:00 AM

    Leistungsvergleich Windows 10 vs. Windows 11: Welches ist besser? Aufgrund der kontinuierlichen Weiterentwicklung und Weiterentwicklung der Technologie werden Betriebssysteme ständig aktualisiert und aktualisiert. Als einer der weltweit größten Betriebssystementwickler hat Microsoft mit seinen Windows-Betriebssystemen schon immer große Aufmerksamkeit bei den Benutzern auf sich gezogen. Im Jahr 2021 veröffentlichte Microsoft das Betriebssystem Windows 11, was breite Diskussionen und Aufmerksamkeit auslöste. Was ist also der Leistungsunterschied zwischen Windows 10 und Windows 11?

    Kirin 8000-Prozessor konkurriert mit Snapdragon-Serie: Wer kann König sein? Kirin 8000-Prozessor konkurriert mit Snapdragon-Serie: Wer kann König sein? Mar 25, 2024 am 09:03 AM

    Im Zeitalter des mobilen Internets sind Smartphones aus dem Alltag der Menschen nicht mehr wegzudenken. Die Leistung von Smartphones bestimmt oft direkt die Qualität des Benutzererlebnisses. Als „Gehirn“ eines Smartphones ist die Leistung des Prozessors besonders wichtig. Auf dem Markt steht die Qualcomm Snapdragon-Serie seit jeher für starke Leistung, Stabilität und Zuverlässigkeit, und kürzlich hat Huawei auch seinen eigenen Kirin 8000-Prozessor auf den Markt gebracht, dem eine hervorragende Leistung nachgesagt wird. Für normale Benutzer ist die Auswahl eines Mobiltelefons mit starker Leistung zu einer zentralen Frage geworden. Heute werden wir es tun

    Die lokale Ausführungsleistung des Embedding-Dienstes übertrifft die von OpenAI Text-Embedding-Ada-002, was sehr praktisch ist! Die lokale Ausführungsleistung des Embedding-Dienstes übertrifft die von OpenAI Text-Embedding-Ada-002, was sehr praktisch ist! Apr 15, 2024 am 09:01 AM

    Ollama ist ein superpraktisches Tool, mit dem Sie Open-Source-Modelle wie Llama2, Mistral und Gemma problemlos lokal ausführen können. In diesem Artikel werde ich vorstellen, wie man Ollama zum Vektorisieren von Text verwendet. Wenn Sie Ollama nicht lokal installiert haben, können Sie diesen Artikel lesen. In diesem Artikel verwenden wir das Modell nomic-embed-text[2]. Es handelt sich um einen Text-Encoder, der OpenAI text-embedding-ada-002 und text-embedding-3-small bei kurzen und langen Kontextaufgaben übertrifft. Starten Sie den nomic-embed-text-Dienst, wenn Sie o erfolgreich installiert haben

    Vergleich der PHP- und Go-Sprachen: großer Leistungsunterschied Vergleich der PHP- und Go-Sprachen: großer Leistungsunterschied Mar 26, 2024 am 10:48 AM

    PHP und Go sind zwei häufig verwendete Programmiersprachen und weisen unterschiedliche Eigenschaften und Vorteile auf. Unter ihnen sind Leistungsunterschiede ein Problem, das im Allgemeinen allen Sorgen bereitet. In diesem Artikel werden PHP- und Go-Sprachen aus Leistungssicht verglichen und ihre Leistungsunterschiede anhand spezifischer Codebeispiele demonstriert. Lassen Sie uns zunächst kurz die Grundfunktionen von PHP und der Go-Sprache vorstellen. PHP ist eine Skriptsprache, die ursprünglich für die Webentwicklung entwickelt wurde. Sie ist einfach zu erlernen und zu verwenden und wird im Bereich der Webentwicklung häufig verwendet. Die Go-Sprache ist eine von Google entwickelte kompilierte Sprache.

    Leistungsvergleich verschiedener Java-Frameworks Leistungsvergleich verschiedener Java-Frameworks Jun 05, 2024 pm 07:14 PM

    Leistungsvergleich verschiedener Java-Frameworks: REST-API-Anforderungsverarbeitung: Vert.x ist am besten, mit einer Anforderungsrate von 2-mal SpringBoot und 3-mal Dropwizard. Datenbankabfrage: HibernateORM von SpringBoot ist besser als ORM von Vert.x und Dropwizard. Caching-Vorgänge: Der Hazelcast-Client von Vert.x ist den Caching-Mechanismen von SpringBoot und Dropwizard überlegen. Geeignetes Framework: Wählen Sie entsprechend den Anwendungsanforderungen. Vert.x eignet sich für leistungsstarke Webdienste, SpringBoot eignet sich für datenintensive Anwendungen und Dropwizard eignet sich für Microservice-Architekturen.

    PHP-Array-Schlüsselwertumdrehen: Vergleichende Leistungsanalyse verschiedener Methoden PHP-Array-Schlüsselwertumdrehen: Vergleichende Leistungsanalyse verschiedener Methoden May 03, 2024 pm 09:03 PM

    Der Leistungsvergleich der PHP-Methoden zum Umdrehen von Array-Schlüsselwerten zeigt, dass die Funktion array_flip() in großen Arrays (mehr als 1 Million Elemente) eine bessere Leistung als die for-Schleife erbringt und weniger Zeit benötigt. Die for-Schleifenmethode zum manuellen Umdrehen von Schlüsselwerten dauert relativ lange.

    Welchen Einfluss haben C++-Funktionen auf die Programmleistung? Welchen Einfluss haben C++-Funktionen auf die Programmleistung? Apr 12, 2024 am 09:39 AM

    Die Auswirkungen von Funktionen auf die Leistung von C++-Programmen umfassen den Overhead für Funktionsaufrufe sowie den Overhead für die Zuweisung lokaler Variablen und Objekte: Overhead für Funktionsaufrufe: einschließlich Stapelrahmenzuweisung, Parameterübertragung und Steuerungsübertragung, was erhebliche Auswirkungen auf kleine Funktionen hat. Overhead bei der Zuordnung lokaler Variablen und Objekte: Die Erstellung und Zerstörung einer großen Anzahl lokaler Variablen oder Objekte kann zu einem Stapelüberlauf und Leistungseinbußen führen.

    See all articles