jQuery效能最佳化

來源:互聯網
上載者:User

標籤:style   blog   io   ar   color   使用   sp   java   for   

1、使用最新版本的jQuery類庫

jQuery每一個版本的更新都會進行一些Bug修複和一些最佳化,同時也會包含一些創新。但是,需要注意版本的相容性,不要忘記測試你的代碼。

2、使用合適的選取器

不同的選取器其效能也有差異,總的來說$("id")>$("p")>$(".class")>$("[attribute=value]")>$(":hidden")。

對於$(".class"),比較新的瀏覽器如IE9,它支援本地方法document.getElementByClassName(),而對於老的瀏覽器,如IE8及之前版本,只能靠使用DOM搜尋方式來實現,這無疑對效能產生較大的影響,所以應該有選擇性的使用。

注意:1、盡量使用ID選取器;2、盡量給選取器指定上下文。

3、緩衝對象

有以下代碼:

#("traffic_light input.on").bind("click",function(){...});#("#traffic_light input.on").css("border",1px dashed yellow");#("#traffic_light input.on").css("background-color",orange");#("traffic_light input.on").fadIn("slow");

jQuery會在建立每一個選取器的過程中,尋找DOM,建立多個jQuery對象,下面是一個較優的寫法:

var $active_light=#("traffic_light input.on");//緩衝變數$active_light.bind("click",function(){...});$active_light.css("border",1px dashed yellow");$active_light.css("background-color",orange");$active_light.fadIn("slow");

當然如果使用鏈式方式將更加簡潔。

永遠不要讓相同的選取器在你的代碼裡出現多次。

4、迴圈時的DOM操作

下面是一個迴圈添加DOM節點的例子,代碼如下:

var top_100 list=[...],//假設這裡是100個獨一無二的字串$mylist=$("#mylist");//jQuery選擇到<ul>元素for(var i=0,l=top_100_list.length;i<1;i++){    $mylist.append("<li>"+top_100_list[i]+"</li>");}

以上代碼,每一個新添加的標籤元素都作為一個節點添加到視窗ID中,我們可以將整個元素字串在插入DOM之前全部建立好,減少DOM操作。代碼如下所示:

var top_100_list=[...],$mylist=$("#mylist"),top_100_li="";//這個變數將用來儲存我們的列表元素for(var i=0,l=top_100_list.length;i<1;i++){    top_100_li+="<li>"+top_100_list[i]+"</li>";}$mylist.html(top_100_li);

 

5、數組方式使用jQuery對象

使用jQuery選取器擷取結果是一個jQuery對象。然而,jQuery類庫會讓你感覺你正在使用一個定義了索引和長度的數組。在效能方面,建議使用簡單for或者while迴圈來處理,而不是$.each(),這樣代碼將更快。

//each()方法$.each(array,function(i){    array[i]=i;}//for代替each()方法var array=new Array();for(var i=0;i<array.length;i++){    array[i]=i;}

 

6、事件代理

也即事件委託,利用事件冒泡機制,通過綁定父節點,來對事件進行監聽。

//未使用事件代理$(‘myTable td‘).click(function(){    $(this).css(‘background‘,‘red‘);});//使用事件代理$(‘myTable‘).click(function(e){   var $clicked=$(e.target);    //e.target 捕捉到觸發的目標元素    $clicked.css(‘background‘,‘red‘);});

 

7、將你的代碼轉化成jQuery外掛程式

外掛程式可以使代碼具有更好的重用性,並且能夠有效協助你組織代碼。建立一個外掛程式代碼如下:

;(function($){    $.fn.yourPluginName=function(){    //Your code goes here    return this;})(jQuery);

 

8、使用join()來拼接字串

通過建立一個數組,然後迴圈,最後使用join()把數組轉化為字串,而不是使用"+"會有助於最佳化效能,尤其是長字串處理的時候。

var array=[];for(var i=0;i<=10000;i++){    array[i]=‘<li>‘+i+‘</li>‘;}$(‘#list‘).html(array.join(‘‘));

 

9、合理利用HTML5的Data屬性

HTML5的data屬性可以協助我們插入資料,特別是前後端的資料交換。jQuery的data()方法,有效利用HTML5的屬性,來自動得到資料。下面是個例子:

<div id="dl" data-role="page" data-last-value="43" data-options=‘{"name":"John"}‘></div>

為了讀取資料,你需要使用如下代碼:

$("#dl").data("role");    //"page"$("#dl").data("lastValue");    //43$("#dl").data("option").name;    //"John"

 

10、盡量使用原生的JavaScript方法

11、壓縮JavaScript

jQuery效能最佳化

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.