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

首頁 > 編程 > JavaScript > 正文

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

2019-11-20 21:09:50
字體:
來源:轉載
供稿:網友

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


    // 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:
 $( "<style type=/"text/css/">a.swedberg { color: #0769ad }</style>")
     .appendTo( "head" );
 Don't Treat jQuery as a Black Box

把jQuery的源碼當成文檔,可以把它(http://bit.ly/jqsource)保存在你的收藏夾內,經常的查閱參考。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
2019日本中文字幕| 久久精品人人做人人爽| 成人综合网网址| 国产91在线高潮白浆在线观看| 久久久久www| 91精品成人久久| 亚洲乱码av中文一区二区| 91免费欧美精品| 深夜福利日韩在线看| 久久国产精品久久久久久久久久| 久久视频在线播放| 亚洲变态欧美另类捆绑| 欧美xxxx做受欧美| 国产精品久久久精品| 隔壁老王国产在线精品| 欧美午夜丰满在线18影院| 国产精品狠色婷| 亚洲乱码国产乱码精品精天堂| 国产日韩欧美视频在线| 欧美一级黄色网| 成人免费网站在线| 一二美女精品欧洲| 97精品伊人久久久大香线蕉| 美女福利视频一区| 亚洲精品在线不卡| 日韩成人在线电影网| 精品久久久久久电影| 麻豆一区二区在线观看| 久久精品国产91精品亚洲| 国产视频亚洲精品| 国内精品久久久久久久久| 黄色成人在线免费| 国产小视频国产精品| 亚洲成人av片| 日韩av色在线| 日韩精品高清视频| 超碰精品一区二区三区乱码| 夜夜嗨av一区二区三区免费区| 成人免费网站在线看| 欧美最猛性xxxxx(亚洲精品)| 久久久日本电影| 日韩在线不卡视频| 97婷婷大伊香蕉精品视频| 日本成人激情视频| 国产精品三级美女白浆呻吟| 国产成人福利网站| 久久成人一区二区| 欧美日韩美女在线| 亚洲欧美国产精品专区久久| 91沈先生在线观看| 中文字幕无线精品亚洲乱码一区| 久久天天躁日日躁| 国模吧一区二区| 欧美日韩人人澡狠狠躁视频| 国产丝袜一区二区| 国产ts一区二区| 亚洲精品电影网| 九九热精品视频国产| 午夜精品久久久久久99热| 91久久久精品| 日韩亚洲综合在线| 国产视频亚洲视频| 国产69精品久久久久9999| 国产精品视频免费观看www| 欧美超级乱淫片喷水| 亚洲福利视频二区| 亚洲电影天堂av| 欧美在线视频一区| 国产91精品久久久久久| 国产亚洲精品久久| 91精品视频大全| 久久99精品久久久久久琪琪| 亚洲久久久久久久久久久| 亚洲欧美国产高清va在线播| 欧美片一区二区三区| 成人在线免费观看视视频| 久久好看免费视频| 97国产精品视频人人做人人爱| 久久国产精品亚洲| 69影院欧美专区视频| 日韩h在线观看| 一本色道久久88综合亚洲精品ⅰ| 久久久精品国产亚洲| 一本色道久久综合亚洲精品小说| 国产69精品久久久久99| 日韩av在线精品| 色系列之999| 精品国产成人av| 成人免费观看网址| 久久av中文字幕| 国产成人高潮免费观看精品| 欧美香蕉大胸在线视频观看| 亚洲精品国产suv| 国产亚洲精品久久久久动| 日韩不卡在线观看| 亚洲视频欧美视频| 国产在线拍揄自揄视频不卡99| 亚洲成色999久久网站| 亚洲一区二区中文| 国产亚洲欧洲高清一区| 欧美性xxxxx极品| 91啪国产在线| 日韩激情视频在线播放| 久久成人国产精品| 在线观看精品国产视频| 欧美在线影院在线视频| 久久精品视频网站| 国内精品国产三级国产在线专| 亚洲国产又黄又爽女人高潮的| 亚洲毛片在线观看| 亚洲人成电影网| 久久大大胆人体| 国产亚洲欧洲黄色| 欧美日本中文字幕| 91最新在线免费观看| 色妞色视频一区二区三区四区| 成人黄色影片在线| 亚洲理论在线a中文字幕| 国产精品中文字幕在线| 久久国产精品视频| 国产欧美日韩视频| 久久亚洲国产成人| 日韩中文字幕精品视频| 亚洲综合精品一区二区| 欧美日韩电影在线观看| 亚洲国产成人精品电影| 全色精品综合影院| 欧美精品久久久久久久免费观看| 另类视频在线观看| 亚洲va男人天堂| 亚洲福利视频二区| 午夜精品久久久久久99热软件| 日韩免费观看视频| 成人淫片在线看| 高清亚洲成在人网站天堂| 高清一区二区三区日本久| 91中文字幕一区| 欧美中文字幕在线观看| 亚洲图片欧美日产| 激情成人中文字幕| 国产精品欧美久久久| 亚洲国产成人精品女人久久久| 美女扒开尿口让男人操亚洲视频网站| 久久久久久久影视| 久久精品久久久久久| 2020国产精品视频| 中文字幕精品www乱入免费视频| 欧美日韩一二三四五区| 日韩精品视频免费在线观看| 亚洲综合av影视| 欧美成人免费全部观看天天性色| 欧美精品电影在线| 91美女高潮出水| 日韩欧美中文字幕在线观看| 九九热精品视频在线播放| 91社影院在线观看| 亲子乱一区二区三区电影| 一区二区三区视频观看| 国产成人精品优优av| 国产亚洲一区二区精品| 亚洲aa在线观看| 国产精品久久久久av免费| 日韩人在线观看| 在线播放国产一区中文字幕剧情欧美|