亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

jquery性能優化高級技巧

2019-11-20 11:45:28
字體:
來源:轉載
供稿:網友

有時候我們在書寫jquery的時候,為了書寫代碼方便,往往忽略了程序執行過程中,給客戶端帶來的壓力。隨之而來的就是在某些低端瀏覽器或者低端電腦上運行速度緩慢,甚至無法運行等問題。

因此我們有必要對我們自己書寫的jquery代碼進行優化,以達到更快捷、更流暢的運行效果。

jquery性能優化高級技巧,下面主要從七個方面對jquery性能優化做介紹:

1.通過CDN(Content Delivery Network)引入jQuery庫

2.減少DOM操作

3.適當使用原生JS

4.選擇器優化

5.緩存jQuery對象

6.定義一個可以復用的函數

7.用數組方式來遍歷jQuery 對象集合

下面詳解每一個方法的具體說明:

通過CDN(Content Delivery Network)引入jQuery庫

 要提升網站中javascript的性能的最簡單的一步就是引入最新版本的jQuery庫,新發布的版本通常在性能上會有更好的提升而且也修復了一下bug?;蛘咄ㄟ^CDN引入也是很好的選擇,通過CDN引入能夠減少網站的加載時間。

以下是一些CDN服務:

<!-- 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="http://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="http://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>

一些國內的CDN服務:

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/

減少DOM操作

雖然javascript性能上有了很大的提升,但是DOM操作還是很耗費資源的,需要減少對DOM操作。當在一個頁面中插入大量的元素的時候,尤其重要。

例如:

<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('' ));

將所有的元素緩存起來一次插入性能上會有所提升,因為只觸發頁面一次重繪。對于CSS樣式屬性也是同樣的道理。

更多閱讀: 前端頁面卡頓?可能是DOM操作惹的禍,你需要優化代碼

適當使用原生JS

創建jQuery對象會帶來一些開銷。所以,如果比較注重性能的話,盡可能使用原生的javascript。在某些方面可能會更容易理解和寫更少的代碼。例如:

// 打印list中的li的id$('#colors li' ). each(function(){//將$(this).attr('id')方法替換為直接通過ID屬性訪問console. log(this. id);})

選擇器優化

如果你需要更好的性能,但是仍然要用到jQuery,你可以在jQuery選擇器優化做一些嘗試。以下是一個測試程序,通過瀏覽器的控制臺console.time 和console.timeEnd 方法來記錄不同選擇器執行時間。

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');21for (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');

執行結果:

緩存jQuery對象

每次通過選擇器構建一個新的jQuery對象時,jQuery的核心部分的Sizzle引擎會遍歷DOM然后通過對應的選擇器來匹配真正的dom元素。這種方式比較低效,在現代瀏覽器中可以通過document.querySelector方法通過傳入對應的Class參數來匹配對應的元素,不過IE8以下版本不支持此方法。一個提高性能的實踐是通過變量緩存jQuery對象。例如:

<ul id="pancakes" >     <li>first</li>     <li>second</li>     <li>third</li>     <li>fourth</li>     <li>fifth</li></ul>

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();

定義一個可以復用的函數

直接上例子:

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

JS:

//Bad: //這個會導致多個回調函數的副本占用內存$('#menuButton, #menuLink' ). click(function(){// ...});//----------------------------------------------//Betterfunction showMenu(){alert('Showing menu!' );// Doing something complex here}$('#menuButton' ). click(showMenu);$('#menuLink' ). click(showMenu);

如果定義一個內聯(inline)回調函數同時這個包含多個元素的jQuery對象(正如上面所說的第一個例子),對于這個集合中的每個元素都會在內存中保存一個回調函數的副本。

用數組方式來遍歷jQuery 對象集合

你或許沒有注意到,但是在性能方面,對于jQuery each方法這種優雅實現是有代價的。有一個辦法能夠更快地遍歷一個jQuery對象。就是通過數組來實現,jQuery對象集合就是一個類數組,具有length和value屬性??梢酝ㄟ^程序來測試一下性能:

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>

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');

結果:

可以看到通過數組實現方式遍歷,執行效率更高。


//-------------------------------------------------------持續更新...

以上是一些搜集知識的總結,如有任何建議或疑問,歡迎留言討論。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产成人aa精品一区在线播放| 在线激情影院一区| 日韩大胆人体377p| 色狠狠av一区二区三区香蕉蜜桃| 欧美乱妇高清无乱码| 国产综合久久久久| 国产精品久久久久久久久借妻| 亚洲夜晚福利在线观看| 日韩精品视频在线观看免费| 一色桃子一区二区| 日韩成人中文字幕| 欧美性猛交xxxxx水多| 欧美丝袜一区二区| 国产亚洲成av人片在线观看桃| 91精品国产777在线观看| 主播福利视频一区| 国产极品精品在线观看| 日韩av在线精品| 国产视频久久网| 亚洲91av视频| 97久久精品视频| 国产成人综合一区二区三区| 91九色蝌蚪国产| 成人精品视频99在线观看免费| 亚洲欧美一区二区三区在线| 国产精品狠色婷| 中国china体内裑精亚洲片| 成人天堂噜噜噜| 亚洲一区二区三区视频| 色在人av网站天堂精品| 色妞欧美日韩在线| 国产一区二中文字幕在线看| 青青a在线精品免费观看| 日本亚洲欧洲色α| 亚洲第一二三四五区| 91中文字幕一区| 亚洲国产精品99| 91在线观看欧美日韩| 精品一区二区三区四区| 亚洲午夜色婷婷在线| 亚洲精品一区二区在线| 久久成人精品电影| 91久久国产婷婷一区二区| 国产一区深夜福利| 亚洲欧美资源在线| 亚洲欧美激情在线视频| 一级做a爰片久久毛片美女图片| 亚洲天堂成人在线视频| 亚洲在线观看视频网站| 一二美女精品欧洲| 欧美日韩成人在线视频| 久久精品2019中文字幕| 欧美美女18p| 久久午夜a级毛片| 国产精品久久久久aaaa九色| 日本午夜人人精品| 5566成人精品视频免费| 亚洲乱码一区av黑人高潮| 久久精品免费电影| 欧美在线视频免费观看| 成人精品aaaa网站| 国产成人91久久精品| 日韩精品高清在线| 欧美国产日韩中文字幕在线| 久久91亚洲精品中文字幕奶水| 欧美日韩午夜激情| 亚洲最大的免费| 日韩一区二区在线视频| 欧美性xxxx极品hd欧美风情| 国产剧情久久久久久| 欧美中文字幕在线观看| 欧美日韩国产中字| 亚洲最大成人网色| 久久免费少妇高潮久久精品99| 国产精品第一视频| 亚洲男人天堂古典| 久久久久五月天| 久久天天躁狠狠躁夜夜躁| 国产一区二区丝袜高跟鞋图片| 亚洲精品国精品久久99热一| 青青草一区二区| 亚洲一区二区三区乱码aⅴ蜜桃女| 欧美一级电影免费在线观看| 91精品国产免费久久久久久| 欧美洲成人男女午夜视频| 欧美精品情趣视频| 中文字幕在线观看日韩| 国产亚洲精品成人av久久ww| 欧美视频一二三| xxx成人少妇69| 亚洲自拍欧美另类| 国产91精品视频在线观看| 日韩亚洲综合在线| 亚洲欧美国产高清va在线播| 1769国内精品视频在线播放| 国产精品午夜一区二区欲梦| 91精品国产91久久久久久久久| 欧美精品久久久久久久免费观看| 亚洲免费小视频| 91国产美女视频| 欧美精品成人91久久久久久久| 中文字幕亚洲一区二区三区| 青青久久aⅴ北条麻妃| 91网站在线看| 国产精品久久久| 日韩av日韩在线观看| 久久69精品久久久久久国产越南| 日韩视频亚洲视频| 情事1991在线| 免费av一区二区| 国产精品成人aaaaa网站| 亚洲乱亚洲乱妇无码| 日韩av理论片| 欧美又大粗又爽又黄大片视频| 中文字幕亚洲欧美| 欧美精品在线观看| 91成人在线观看国产| 69视频在线播放| 久久久久国产精品免费网站| 欧美成人精品在线播放| 成人免费网站在线看| 久久久久久亚洲精品中文字幕| 欧美精品一二区| 中文字幕日韩高清| 中文字幕亚洲专区| 日韩毛片中文字幕| 欧美午夜宅男影院在线观看| 国内精品久久久久久久久| 日韩在线www| 国模私拍视频一区| 国产欧美日韩免费看aⅴ视频| 91国语精品自产拍在线观看性色| 一区三区二区视频| 欧美在线亚洲在线| 日本精品视频在线播放| 91福利视频网| 久久精品国产亚洲7777| 欧美国产精品日韩| 亚洲欧美国产精品久久久久久久| 亚洲成人激情在线观看| 亚洲日本成人女熟在线观看| 超碰精品一区二区三区乱码| 亚洲人成网在线播放| 日韩亚洲欧美中文高清在线| 久久久久在线观看| 亚洲国产精品va在看黑人| 久久影视三级福利片| 岛国视频午夜一区免费在线观看| 欧美精品免费看| 亚洲色图狂野欧美| 亚洲第一精品夜夜躁人人爽| 久久夜色精品国产欧美乱| 国产精品爽爽爽| 亚洲中国色老太| 亚洲欧美综合区自拍另类| 久久久999成人| 日韩在线免费观看视频| 亚洲男人天堂手机在线| 国产一区私人高清影院| 国产视频久久网| 国产一区二区三区三区在线观看| 国产精品大陆在线观看| 中文字幕不卡在线视频极品| 国产精品中文字幕在线观看|