自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

即刻提升jQuery性能的十個(gè)技巧

開(kāi)發(fā) 開(kāi)發(fā)工具 前端
本文提供即刻提升你的jQuery腳本性能的十個(gè)步驟,幫助您簡(jiǎn)化工作及編程代碼量,不用擔(dān)心,這并不是什么高深的技巧,人人皆可運(yùn)用。

jQuery正在成為Web開(kāi)發(fā)人員***的JavaScript庫(kù),作為Web開(kāi)發(fā)者,除了要了解語(yǔ)言和框架的應(yīng)用技巧外,如何提升語(yǔ)言本身的性能也是開(kāi)發(fā)人員應(yīng)該思考的問(wèn)題。文章就以jQuery為例,為大家提供了10個(gè)有效提升jQuery性能的小技巧。

更多jQuery內(nèi)容,51CTO推薦專(zhuān)題:jQuery從入門(mén)到精通

1. 使用***版本

jQuery一直處于不斷的開(kāi)發(fā)和改進(jìn)過(guò)程中。John和他的團(tuán)隊(duì)不斷研究著提升程序性能的新方法。

jQuery

如果你不想時(shí)刻關(guān)注是否有新版本,然后再花時(shí)間下載上傳,Google就又能幫你一把了。他們的服務(wù)器上存儲(chǔ)了大量Ajax庫(kù)供您選擇。

  1. <!-- 利用一個(gè)簡(jiǎn)單的script標(biāo)簽調(diào)用API -->    
  2.  
  3. <script type="text/javascript" src="http://www.google.com/jsapi"></script>    
  4. <script type="text/javascript">    
  5.  
  6. /* 加載 jQuery v1.3.2 */   
  7.  
  8. google.load ("jquery", "1.3.2", {uncompressed: false});    
  9.  
  10. /* 加載完成后彈出消息 */   
  11.  
  12. function onLoad() {    
  13.  
  14.      alert ("jQuery + Google API!");    
  15. }    
  16. google.setOnLoadCallback (onLoad);    
  17. </script>  

另一個(gè)更為簡(jiǎn)單快速的方法是直接使用腳本鏈接。如果要使用特定版本的jQuery,你可以使用上面的方法;如果想直接使用***版,下面這句代碼就夠了:

  1. <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script> 
  2.  

特定版本的還可以這樣加載:

  1. <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
  2.   

#p#

2. 合并、最小化腳本

大部分瀏覽器都不能同時(shí)處理多個(gè)腳本文件,所以它們都是排隊(duì)加載——加載時(shí)間也相應(yīng)地延長(zhǎng)了。考慮到你網(wǎng)站的每個(gè)頁(yè)面都會(huì)加載這些腳本,你應(yīng)該考慮把它們放到單個(gè)文件中,然后利用壓縮工具(比如Dean Edwards的這款)把它們最小化。更小的文件無(wú)疑將帶來(lái)更快的加載速度。

引自YUI compressor,一款jQuery官方推薦的壓縮腳本的工具:JavaScript和CSS壓縮的目的是在保持腳本的執(zhí)行性能的同時(shí),減少數(shù)據(jù)傳遞的字節(jié)數(shù)(可以通過(guò)減小原始文件,也可以利用gzip。大多數(shù)產(chǎn)品級(jí)的網(wǎng)絡(luò)服務(wù)器都把gzip作為HTTP協(xié)議的一部分)。

3. 用for替代each

原生函數(shù)總是比輔助組件更快。如果遇到需要遍歷對(duì)象的情況(如從遠(yuǎn)程接收的JSON對(duì)象),你***重寫(xiě)你的(JSON)對(duì)象為一個(gè)數(shù)組,數(shù)組的循環(huán)處理要容易些。利用Firebug,我們能測(cè)定每個(gè)函數(shù)的執(zhí)行時(shí)間。

  1. var array = new Array ();    
  2. for (var i = 0; i < 10000; i++) {    
  3.  
  4.     array[i] = 0;    
  5.  
  6. }    
  7.  
  8. console.time('native');  //原生for函數(shù)    
  9. var l = array.length;    
  10.  
  11.  for (var i = 0; i < l; i++) {    
  12.  
  13.      array[i] = i;    
  14.  
  15.  }    
  16.  
  17. console.timeEnd('native');    
  18. console.time('jquery');  //jQuery的each方法    
  19. $.each(array, function(i) {    
  20.  
  21.      array[i] = i;    
  22.  
  23. });    
  24. console.timeEnd('jquery');  

 

用for替代each

上面的結(jié)果顯示原生代碼只需2毫秒就做到的事,利用jQuery的each方法需要26毫秒。而且這還只是我在本機(jī)上測(cè)試一個(gè)基本上啥也沒(méi)做的函數(shù)的結(jié)果,當(dāng)遇到更復(fù)雜的情況,例如設(shè)置css屬性或DOM操作時(shí),時(shí)間差異肯定更大。

#p#

4. 用ID替代class選擇器

利用ID選擇對(duì)象要好得多,因?yàn)檫@時(shí)jQuery會(huì)使用瀏覽器的原生函數(shù)getElementByID()來(lái)獲取對(duì)象,查詢(xún)速度很快。因此,比起利用那些方便的css選擇技巧,使用更為復(fù)雜的選擇器也是值得的(jQuery也為我們提供了復(fù)雜選擇器)。

你也可以手工書(shū)寫(xiě)自己的選擇器(其實(shí)比你想象中簡(jiǎn)單),或者為你想要選擇的元素指定一個(gè)有ID的容器。

  1. //下例創(chuàng)建一個(gè)列表并且填充條目?jī)?nèi)容    
  2. //然后每個(gè)條目都被選擇一次    
  3. //首先使用class選擇    
  4. console.time('class');    
  5. var list = $('#list');    
  6. var items = '<ul>';    
  7. for (i =0; i < 1000; i++) {    
  8.  
  9.      items += '<li>item</li>';    
  10.  
  11. }    
  12.  
  13. items += '</ul>';    
  14. list.html(items);    
  15. for (i = 0; i < 1000; i++) {    
  16.      var s = $('.item' + i);    
  17.  
  18. }    
  19. console.timeEnd('class');    
  20.  
  21. //然后利用ID選擇    
  22. console.time('id');    
  23. var list = $('#list');    
  24. var items = '<ul>';    
  25. for (i = 0; i < 1000; i++) {    
  26.      items += '<li id="item' + i + '">item</li>';    
  27.  
  28. }    
  29.  
  30. items += '</ul>';    
  31. list.html(items);    
  32. for (i = 0; i < 1000; i++) {    
  33.  
  34.      var s = $('#item' + i);    
  35.  
  36. }    
  37. console.timeEnd('id');  

上面的例子很好地說(shuō)明了不同選擇方式之間的顯著性能差異。請(qǐng)看下圖,利用class來(lái)做選擇,時(shí)間無(wú)限增大,甚至超過(guò)了五秒:

利用class來(lái)做選擇

5. 給選擇器指定前后文

如果你一定要利用class來(lái)指定目標(biāo),至少為選擇器指定上下文,以免jQuery費(fèi)精力去遍歷整個(gè)DOM文檔,與其這樣寫(xiě):

  1. $('.class').css ('color' '#123456'); 
  2.  

也就是說(shuō):

  1. $('.class', '#class-container').css ('color', '#123456');
  2.   

這樣做要快得多,因?yàn)樗挥帽闅v整個(gè)DOM。只要找到#class-container就好了。

#p#

6. 建立緩存

不要犯不斷重新選擇同一個(gè)東西的錯(cuò)誤。你應(yīng)該把你要處理的元素緩存為一個(gè)變量。更不要在一個(gè)循環(huán)里重復(fù)選擇同一個(gè)元素!這樣做十分影響速度!

  1. $('#item').css('color', '#123456');    
  2. $('#item').html('hello');    
  3. $('#item').css('background-color', '#ffffff');    
  4.  
  5. // 這樣寫(xiě)更好    
  6. $('#item').css('color', '#123456').html('hello').css('background-color', '#ffffff');    
  7.  
  8. // 甚至這樣    
  9. var item = $('#item');    
  10. item.css('color', '#123456');    
  11. item.html('hello');    
  12. item.css('background-color', '#ffffff');    
  13.  
  14. // 遇到循環(huán),這樣做非常不好    
  15. console.time('no cache');    
  16.  
  17. for (var i = 0; i < 1000; i++) {    
  18.  
  19.     $('#list').append(i);    
  20.  
  21. }    
  22.  
  23. console.timeEnd('no cache');    
  24.  
  25. // 下面這樣要好得多    
  26. console.time('cache');    
  27. var item = $('#list');    
  28. for (var i = 0; i < 1000; i++) {    
  29.  
  30.      item.append (i);    
  31.  
  32. }    
  33.  
  34. console.timeEnd('cache');  

如下圖所示,即使是相對(duì)較短的迭代,緩存的效果還是很明顯的。

建立緩存

#p#

7. 避免DOM操作

DOM操作應(yīng)該越少越好,因?yàn)橹T如prepend(),append(),after()的插入動(dòng)作都很費(fèi)時(shí)。上面的例子如果用html()會(huì)更快:

  1. var list = '';    
  2. for (var i = 0; i < 1000; i++) {    
  3.  
  4.      list += '<li>' + i + '</li>';    
  5.  
  6. }    
  7.  
  8. $('#list').html (list);  

8. 避免使用concat(),利用join()處理長(zhǎng)字串

聽(tīng)起來(lái)可能挺奇怪,不過(guò)這樣做真的能提升速度,尤其是當(dāng)連接特別長(zhǎng)的字串時(shí)。先建立一個(gè)數(shù)組,放入你想要串聯(lián)的東西。join()方法比字符串的concat()函數(shù)要快得多。

  1. var array = [];    
  2. for (var i = 0; i <= 10000; i++) {    
  3.  
  4.     array[i] = '<li>' + i + '</li>';    
  5.  
  6. }    
  7.  
  8. $('#list').html(array.join (''));  

近期一項(xiàng)由Tom Trenka發(fā)起的測(cè)試中,得出了下表的結(jié)果:

Tom Trenka測(cè)試

9. 返回false值

您可能已經(jīng)注意到,如果函數(shù)執(zhí)行后不返回false,你就會(huì)被跳轉(zhuǎn)到頁(yè)面頂部。如果頁(yè)面較長(zhǎng),這種反應(yīng)是很煩人的。所以,與其這樣:

  1. $('#item').click(function() {    
  2.  
  3.     // stuff here    
  4.  
  5.  });  

不如多加一句:

  1. $('#item').click(function() {    
  2.  
  3.     // stuff here    
  4.  
  5.     return false;    
  6. );  

10. 額外小貼士 – 小抄和參考文檔

額外小貼士

這條建議并不直接提升函數(shù)的執(zhí)行速度,不過(guò)如果你肯花時(shí)間在這上面,研究研究這些小抄和參考文檔,你將來(lái)定能節(jié)約很多時(shí)間。

文章轉(zhuǎn)自PHP愛(ài)好者     譯者:慵云

英文原地址:http://net.tutsplus.com/tutorials/javascript-ajax/10-ways-to-instantly-increase-your-jquery-performance/

譯文原地址:http://blog.benhuoer.com/posts/10-tips-for-jquery-performance.html

【編輯推薦】

  1. 一些應(yīng)該熟記于心的jQuery函數(shù)和技巧
  2. 12種jQuery性能優(yōu)化方法解析
  3. 5種方法教你用jQuery重寫(xiě)表單驗(yàn)證
  4. 你應(yīng)該學(xué)習(xí)jQuery的七大理由
  5. 了解jQuery技巧來(lái)提高你的代碼質(zhì)量
責(zé)任編輯:王曉東 來(lái)源: PHP愛(ài)好者
相關(guān)推薦

2024-11-18 19:00:29

2024-09-04 14:28:20

Python代碼

2011-08-01 09:20:16

2023-05-24 16:48:47

Jupyter工具技巧

2022-05-04 20:51:28

API設(shè)計(jì)高性能

2021-05-12 09:00:00

WebReactJavaScript

2024-12-02 14:28:17

JavaScriptWeb開(kāi)發(fā)

2023-03-09 16:42:00

程序性能優(yōu)化Java技巧

2019-08-16 02:00:46

AndroidGoogle 移動(dòng)系統(tǒng)

2024-11-11 08:11:39

2023-11-27 18:01:17

MySQL技巧

2024-12-03 14:33:42

Python遞歸編程

2011-08-05 10:55:53

2021-09-18 10:07:23

開(kāi)發(fā)技能代碼

2023-01-17 16:43:19

JupyterLab技巧工具

2022-05-12 08:12:51

PythonPip技巧

2023-10-16 07:55:15

JavaScript對(duì)象技巧

2024-12-24 08:23:31

2015-08-24 09:12:00

Redis 技巧

2023-07-02 14:21:06

PythonMatplotlib數(shù)據(jù)可視化庫(kù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)