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;”使很有必要的,因為你會發現在很長的頁面中,如果你沒有加上這句,它會跳到頁面的頂部,這樣使用者體驗是很不爽的。