jQuery最佳化方案

來源:互聯網
上載者:User

1.請從ID選取器開始
    如果你要找的dom對象已經有ID了,你直接使用ID選取器找到它吧,因為你可以想象的到,jQuery使用的是JavaScript的getElementById()方法,原生態的方法總是最快的。如果你要找的dom對象沒有ID或者你要選擇多個dom對象,請從最近的有ID的對象開始繼承吧。如$(“#nearid input”)。這樣做可以減少DOM遍曆和迴圈的次數。

2.在class前使用標籤名
    jQuery中第二快的選取器是標籤選取器,因為它來自原生的getElementsByTagName()方法。你要尋找一個class名為“myclass”的div,請使用$(“div.myclass”);當然為了縮小dom尋找範圍你也可在選取器前加上一個div附近的id,如:$(“#nearid div.myclass”);但請注意不要使用標籤來修飾ID,會先遍曆標籤,然後再匹配到對應的id。使用ID來修飾ID,也是畫蛇添足。

3.給選取器指定前後文
    這個其實跟前面兩條最佳化的思想是一樣的,就為了縮小遍曆的範圍:$(“.myclass”,”#nearid”);

4.請緩衝jQuery對象吧
    如果你要多次使用同一個jQuery對象,不要讓同一個選取器在代碼中多次出現。你可以這樣:
var $sel = $(“nearid div.myclass”);$sel.css(“border”,”1px”);$sel.bind(“click”,function(){ … });$sel.fadeOut();
當然你也可以使用鏈式操作:$sel.css(“border”,”1px”).bind(“click”,function(){ … }).fadeOut();

5.請不要直接對DOM操作
    如:
var $sel = $(“ul”);for(var i=0;i<10000;i++){
 $sel.append(“<li>”+i+”</li>”);
}
使用prepend(),append(),after()其實還是很慢的,你可以這樣做:
var $sel = $(“ul”);
var temstr = “”;
for(var i=0;i<10000;i++)
{
 temstr = “<li>”+i+”</li>”;
}
$sel.html(temstr);

6.充分利用Javascript的冒泡特性
    每個js事件都會冒泡到父節點,當我們在給多個元素處理,我們可以給其父物件綁定事件就可以了,如我們要動態改變table中tr的背景色:
$(“table”).mouseover(function( e ){
    var $clicked = $(e.target); $clicked.css(“backgroud”,”#ccc”);
});
這種方式的優點終於它只需要為table綁定一個事件,而不是為每一個tr綁定一個事件。

7.適量使用$(document).ready
    $(document).ready可是是我們最初學習jQuery的時候最先接觸的一個函數了,他可以在頁面還處於渲染的時候就執行。但是如果你把什麼都放在這裡面,可能會導致頁面載入的時候CPU佔用過高,特別是在IE6下,效果很明顯。那怎麼辦呢?可以使用$(window).load 事件的訪問來替代它。Load事件是在頁面下載完成之後才觸發的。
$(window).load(function(){ 
    // 頁面完全載入後才初始化的jQuery函數. 
});

8.盡量減少live的使用
    這個方法確實好用,但是卻很耗資源。因為它可能是類似定時器一樣每隔一定時間就去DOM對象裡尋找綁定對象。替代方案就是你在動態改變了DOM後,請重新綁定要操作新增元素的方法。

9.使用data()儲存臨時變數

    在函數內我們通常會定義一個臨時變數,jQuery提供了data(),它是基於key/val,使用data方法可以避免在DOM中儲存資料,我們何不去使用它呢?

10.減少each的使用

    在要使用each的時候,何不該有for來替代它呢?因為原生函數總是比輔助組件更快。

11. 返回false值
    
    在你的函數結束時加上一句“return false;”使很有必要的,因為你會發現在很長的頁面中,如果你沒有加上這句,它會跳到頁面的頂部,這樣使用者體驗是很不爽的。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.