首頁 web前端 js教程 提升jQuery的效能需要做好七件事_jquery

提升jQuery的效能需要做好七件事_jquery

May 16, 2016 pm 03:20 PM
jquery 效能

做好七件事幫你提升jQuery的效能,想知道哪幾件事情嗎?

1. Append Outside of Loops

凡是觸及DOM都是有代價的。如果你在DOM當中附加大量的元素,你會想一次將它們全部附加進來,而不是分多次進行。當在循環當中附加元素就會產生一個常見的問題。

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

  var newListItem = "<li>" + item + "</li>";
 
 $( "#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 += "<li>" + item + "</li>";

});

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

登入後複製

當然還有其它一些技巧可以供你嘗試。一個名為 jsperf 的網站為測試這些效能提供了一個好的出路。該網站允許你使用基準測試每一個技巧,並將其跨平台的效能測試結果視覺化的展現出來。

2. Cache Length During Loops

在for迴圈當中,不要每次都存取陣列的 length 屬性;應事先將其快取起來。

var myLength = myArray.length;

for ( var i = 0; i < myLength; 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() {&#8232;

  // make it ajax! \o/&#8232;

});

登入後複製

本指南特別適用於那些當選擇器不包含元素時還需要大量的開銷的 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.
复制代码
6. 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:
$( "<style type=\"text/css\">a.swedberg { color: #0769ad }</style>")
  .appendTo( "head" );

登入後複製

7. Don't Treat jQuery as a Black Box

以上就是提升jQuery的效能需要做好的七件事,清楚了吧!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1422
52
Laravel 教程
1316
25
PHP教程
1267
29
C# 教程
1239
24
Windows10與Windows11效能比較:哪個更勝一籌? Windows10與Windows11效能比較:哪個更勝一籌? Mar 28, 2024 am 09:00 AM

Windows10與Windows11效能比較:哪個更勝一籌?隨著科技的不斷發展與進步,作業系統也不斷更新和升級。微軟公司作為全球最大的作業系統開發人員之一,其發布的Windows系列作業系統一直備受用戶關注。在2021年,微軟發布了Windows11作業系統,引發了廣泛的討論和關注。那麼,究竟Windows10與Windows11在效能方面有何不同,哪個

PHP與Go語言比較:效能差異大 PHP與Go語言比較:效能差異大 Mar 26, 2024 am 10:48 AM

PHP與Go語言是兩種常用的程式語言,它們有著不同的特色與優勢。其中,效能差異是大家普遍關注的問題。本文將從效能角度對比PHP和Go語言,並透過具體的程式碼範例來展示它們的效能差異。首先,讓我們先簡單介紹一下PHP和Go語言的基本特點。 PHP是一種腳本語言,最初設計用於Web開發,易學易用,廣泛應用於Web開發領域。而Go語言是由Google開發的一種編譯型

本地運作效能超越 OpenAI Text-Embedding-Ada-002 的 Embedding 服務,太方便了! 本地運作效能超越 OpenAI Text-Embedding-Ada-002 的 Embedding 服務,太方便了! Apr 15, 2024 am 09:01 AM

Ollama是一款超實用的工具,讓你能夠在本地輕鬆運行Llama2、Mistral、Gemma等開源模型。本文我將介紹如何使用Ollama實現對文本的向量化處理。如果你本地還沒有安裝Ollama,可以閱讀這篇文章。本文我們將使用nomic-embed-text[2]模型。它是一種文字編碼器,在短的上下文和長的上下文任務上,效能超越了OpenAItext-embedding-ada-002和text-embedding-3-small。啟動nomic-embed-text服務當你已經成功安裝好o

Win11和Win10系統效能對比,究竟哪一個更勝一籌? Win11和Win10系統效能對比,究竟哪一個更勝一籌? Mar 27, 2024 pm 05:09 PM

一直以來,Windows作業系統一直是人們在個人電腦上使用最為廣泛的作業系統之一,而Windows10長期以來一直是微軟公司的旗艦作業系統,直到最近微軟推出了全新的Windows11系統。隨著Windows11系統的推出,人們對於Windows10與Windows11系統的效能差異開始感興趣,究竟兩者之間哪一個更勝一籌呢?首先,讓我們來看看W

PHP 陣列鍵值翻轉:不同方法的效能比較分析 PHP 陣列鍵值翻轉:不同方法的效能比較分析 May 03, 2024 pm 09:03 PM

PHP數組鍵值翻轉方法效能比較顯示:array_flip()函數在大型數組(超過100萬個元素)下比for迴圈效能更優,耗時更短。手動翻轉鍵值的for迴圈方法耗時相對較長。

不同Java框架的效能對比 不同Java框架的效能對比 Jun 05, 2024 pm 07:14 PM

不同Java框架的效能比較:RESTAPI請求處理:Vert.x最佳,請求速率達SpringBoot2倍,Dropwizard3倍。資料庫查詢:SpringBoot的HibernateORM優於Vert.x及Dropwizard的ORM。快取操作:Vert.x的Hazelcast客戶端優於SpringBoot及Dropwizard的快取機制。合適框架:根據應用需求選擇,Vert.x適用於高效能Web服務,SpringBoot適用於資料密集型應用,Dropwizard適用於微服務架構。

C++ 函式對程式效能有哪些影響? C++ 函式對程式效能有哪些影響? Apr 12, 2024 am 09:39 AM

函数对C++程序性能的影响包括函数调用开销、局部变量和对象分配开销:函数调用开销:包括堆栈帧分配、参数传递和控制权转移,对小函数影响显著。局部变量和对象分配开销:大量局部变量或对象创建和销毁会导致堆栈溢出和性能下降。

C++中如何優化多執行緒程式的效能? C++中如何優化多執行緒程式的效能? Jun 05, 2024 pm 02:04 PM

優化C++多執行緒效能的有效技術包括:限制執行緒數量,避免爭用資源。使用輕量級互斥鎖,減少爭用。優化鎖的範圍,最小化等待時間。採用無鎖定資料結構,提高並發性。避免忙等,透過事件通知執行緒資源可用性。

See all articles