Heim > Web-Frontend > js-Tutorial > Hauptteil

Erweiterte Tipps zur Optimierung der JQuery-Leistung_jquery

WBOY
Freigeben: 2016-05-16 15:43:23
Original
1191 Leute haben es durchsucht

Manchmal ignorieren wir beim Schreiben von jQuery aus Gründen der Bequemlichkeit beim Schreiben von Code häufig den Druck, der während der Programmausführung auf den Client ausgeübt wird. Damit einher gehen Probleme wie eine langsame Ausführungsgeschwindigkeit oder sogar die Unfähigkeit, auf einigen Low-End-Browsern oder Low-End-Computern ausgeführt zu werden.

Daher ist es für uns notwendig, unseren eigenen JQuery-Code zu optimieren, um einen schnelleren und reibungsloseren Betrieb zu erreichen.

Erweiterte Techniken zur Optimierung der JQuery-Leistung. Im Folgenden wird die Optimierung der JQuery-Leistung hauptsächlich aus sieben Aspekten vorgestellt:

1. Einführung der jQuery-Bibliothek über CDN (Content Delivery Network)

2. DOM-Operationen reduzieren

3. Verwenden Sie natives JS entsprechend

4. Selektoroptimierung

5. Zwischenspeichern von jQuery-Objekten

6. Definieren Sie eine wiederverwendbare Funktion

7. Verwenden Sie die Array-Methode, um die jQuery-Objektsammlung zu durchlaufen

Die spezifischen Anweisungen für jede Methode werden unten erklärt:

Einführung der jQuery-Bibliothek über CDN (Content Delivery Network)

Der einfachste Schritt zur Verbesserung der Leistung von JavaScript auf Ihrer Website ist die Einführung der neuesten Version der jQuery-Bibliothek. Die neu veröffentlichte Version bietet normalerweise bessere Leistungsverbesserungen und behebt einige Fehler. Oder die Einführung über CDN ist ebenfalls eine gute Wahl. Die Einführung über CDN kann die Ladezeit der Website verkürzen.

Hier sind einige CDN-Dienste:

<!-- Case 1 - jQuery CDN -->
<script src="http://code.jquery.com/jquery-1.10.2.min.js" ></script>
<!-- Case 2 - requesting jQuery from Googles CDN (notice the protocol) -->
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js" ></script>
<!-- Case 3 - requesting the latest minor 1.10.x version (only cached for an hour) -->
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10/jquery.min.js" ></script>
<!-- Case 4 - requesting the absolute latest jQuery version (use with caution) -->
<script src="http://code.jquery.com/jquery.min.js" ></script>
Nach dem Login kopieren

Einige inländische CDN-Dienste:

http://www.bootcdn.cn/jquery/
<!--新浪 CDN-->
<script src="http://lib.sinaapp.com/js/jquery/1.9.1/jquery-1.9.1.min.js"></script>
<!--百度 CDN-->
<script src="http://libs.baidu.com/jquery/1.9.1/jquery.min.js"></script>
<!--Bootstrap CDN-->
http://www.bootcdn.cn/jquery/
Nach dem Login kopieren

DOM-Operationen reduzieren

Obwohl die JavaScript-Leistung erheblich verbessert wurde, sind DOM-Vorgänge immer noch sehr ressourcenintensiv und DOM-Vorgänge müssen reduziert werden. Dies ist besonders wichtig, wenn Sie eine große Anzahl von Elementen in eine Seite einfügen.

Zum Beispiel:

<div id="elem" ></div>

// 不好的方式
//var elem = $('#elem');
//for(var i = 0; i < 100; i++){
// elem.append('<li>element '+i+'</li>');
//}
// 好的方式
var elem = $('#elem' ),
arr = [];
for(var i = 0; i < 100; i++){
arr. push('<li>element ' +i+'</li>' );
}
elem. append(arr. join('' ));
Nach dem Login kopieren

Das Zwischenspeichern aller Elemente und das einmalige Einfügen verbessert die Leistung, da nur ein Neuaufbau der Seite ausgelöst wird. Das Gleiche gilt für CSS-Stileigenschaften.

Weitere Lektüre: Startseite hängt fest? Es kann durch DOM-Vorgänge verursacht werden. Sie müssen den Code optimieren

Natives JS angemessen verwenden

Das Erstellen von jQuery-Objekten bringt einen gewissen Mehraufwand mit sich. Wenn die Leistung wichtiger ist, verwenden Sie daher so oft wie möglich natives Javascript. In mancher Hinsicht ist es möglicherweise einfacher zu verstehen und erfordert weniger Code zum Schreiben. Zum Beispiel:

// 打印list中的li的id
$('#colors li' ). each(function(){
//将$(this).attr('id')方法替换为直接通过ID属性访问
console. log(this. id);
})
Nach dem Login kopieren

Selektoroptimierung

Wenn Sie eine bessere Leistung benötigen, aber dennoch jQuery verwenden möchten, können Sie eine Optimierung des jQuery-Selektors ausprobieren. Das Folgende ist ein Testprogramm, das die Ausführungszeit verschiedener Selektoren über die Konsolenmethoden console.time und console.timeEnd des Browsers aufzeichnet.

HTML:

<div id="peanutButter" >
<div id="jelly" class=".jellyTime" ></div>
</div>
JS:

//测试程序
var iterations = 10000,
  i;
//--------------------------------------------
//Case 1: 很慢
console.time('Fancy');
for (i = 0; i < iterations; i++) {
  $('#peanutButter div:first');
}
console.timeEnd('Fancy');
//--------------------------------------------
//Case 2: 比较好,但仍然很慢
console.time('Parent-child');
for (i = 0; i < iterations; i++) {
  $('#peanutButter div');
}
console.timeEnd('Parent-child');
//--------------------------------------------
//Case 3: 一些浏览器会比较快
console.time('Parent-child by class');
for (i = 0; i < iterations; i++) {
  // 通过后代Class选择器
  $('#peanutButter .jellyTime');
}
console.timeEnd('Parent-child by class');
//--------------------------------------------
//Case 4: 更好的方式 
console.time('By class name');
21
for (i = 0; i < iterations; i++) {
  // 直接通过Class选择器
  $('.jellyTime');
}
console.timeEnd('By class name');
//--------------------------------------------
//Case 5: 推荐的方式 ID选择器
console.time('By id');
for (i = 0; i < iterations; i++) {
  $('#jelly');
}
console.timeEnd('By id');
Nach dem Login kopieren

Ausführungsergebnis:

JQuery-Objekte zwischenspeichern

Jedes Mal, wenn ein neues jQuery-Objekt über einen Selektor erstellt wird, durchläuft die Sizzle-Engine im Kern von jQuery das DOM und gleicht das echte DOM-Element über den entsprechenden Selektor ab. Diese Methode ist relativ ineffizient. Sie können die Methode document.querySelector verwenden, um das entsprechende Element durch Übergabe des entsprechenden Klassenparameters abzugleichen. Versionen unter IE8 unterstützen diese Methode jedoch nicht. Eine Methode zur Verbesserung der Leistung besteht darin, jQuery-Objekte über Variablen zwischenzuspeichern. Zum Beispiel:

<ul id="pancakes" >
     <li>first</li>
     <li>second</li>
     <li>third</li>
     <li>fourth</li>
     <li>fifth</li>
</ul>
Nach dem Login kopieren

JS:

// 不好的方式:
// $('#pancakes li').eq(0).remove();
// $('#pancakes li').eq(1).remove();
// $('#pancakes li').eq(2).remove();
// ------------------------------------
// 推荐的方式:
var pancakes = $('#pancakes li');
pancakes.eq(0).remove();
pancakes.eq(1).remove();
pancakes.eq(2).remove();
// ------------------------------------
// 或者:
// pancakes.eq(0).remove().end()
// .eq(1).remove().end()
// .eq(2).remove().end();
Nach dem Login kopieren

Definieren Sie eine wiederverwendbare Funktion

Gehen Sie direkt zum Beispiel:

HTML:
<button id="menuButton" >Show Menu!</button>
<a href="#" id="menuLink" >Show Menu!</a>
Nach dem Login kopieren

JS:

//Bad: 
//这个会导致多个回调函数的副本占用内存
$('#menuButton, #menuLink' ). click(function(){
// ...
});
//----------------------------------------------
//Better
function showMenu(){
alert('Showing menu!' );
// Doing something complex here
}
$('#menuButton' ). click(showMenu);
$('#menuLink' ). click(showMenu);
Nach dem Login kopieren

Wenn Sie eine Inline-Callback-Funktion mit einem jQuery-Objekt definieren, das mehrere Elemente enthält (wie im ersten Beispiel oben), wird für jedes Element in der Sammlung eine Callback-Funktion im Speicher gespeichert.

Array-Methode zum Durchlaufen der jQuery-Objektsammlung verwenden

Sie haben es vielleicht nicht bemerkt, aber diese elegante Implementierung der jQuery-Methode geht mit Kosten in Bezug auf die Leistung einher. Es gibt eine schnellere Möglichkeit, ein jQuery-Objekt zu durchlaufen. Es wird über ein Array implementiert. Die jQuery-Objektsammlung ist ein Array-ähnliches Objekt mit Längen- und Wertattributen. Sie können die Leistung über das Programm testen:

HTML:

<ul id="testList" >
  <li>Item</li>
  <li>Item</li>
  <li>Item</li>
  <li>Item</li> 
  <li>Item</li>
  <li>Item</li>
  <li>Item</li>
  <li>Item</li>
  <li>Item</li>
  <!-- add 50 more -->
</ul>
Nach dem Login kopieren

JS:

var arr = $('li'),
  iterations = 100000;
//------------------------------
// Array实现:  
console.time('Native Loop');
for (var z = 0; z < iterations; z++) {
  var length = arr.length;
  for (var i = 0; i < length; i++) {
    arr[i];
  }
}
console.timeEnd('Native Loop');
//------------------------------
// each实现:  
console.time('jQuery Each');
for (z = 0; z < iterations; z++) {
  arr.each(function(i, val) {
    this;
  });
}
console.timeEnd('jQuery Each');
Nach dem Login kopieren

Ergebnis:

Sie können sehen, dass die Durchquerung der Array-Implementierung eine höhere Ausführungseffizienz aufweist.


//------------------------------------------------ -------Kontinuierliche Updates...

Das Obige ist eine Zusammenfassung einiger gesammelter Erkenntnisse. Wenn Sie Vorschläge oder Fragen haben, hinterlassen Sie bitte eine Nachricht zur Diskussion.

Quelle:php.cn
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!