在w3cfuns上看到一篇關於提升jquery編碼優化的文章,覺得有用,摘錄下來供自己借鑑.
緩存變量
DOM遍歷是昂貴的,所以儘量將會重用的元素緩存。
-
// 糟糕
-
-
h = $('#element').height();
-
$('#element').css('height',h-20);
-
-
// 建議
-
-
$element = $('#element');
-
h = $element.height();
-
$element.css('height',h-20);
避免全局變量jQuery與javascript一樣,一般來說,最好確保你的變量在函數作用域內。
-
// 糟糕
-
-
$element = $('#element');
-
h = $element.height();
-
$element.css('height',h-20);
-
-
// 建議
-
-
var $element = $('#element');
-
var h = $element.height();
-
$element.css('height',h-20);
使用匈牙利命名法在變量前加$前綴,便於識別出jQuery對象。
-
// 糟糕
-
-
var first = $('#first');
-
var second = $('#second');
-
var value = $first.val();
-
-
// 建議 - 在jQuery對象前加$前綴
-
-
var $first = $('#first');
-
var $second = $('#second'),
-
var value = $first.val();
使用 Var 鏈(單 Var 模式)將多條var語句合併爲一條語句,我建議將未賦值的變量放到後面。
-
var
-
$first = $('#first'),
-
$second = $('#second'),
-
value = $first.val(),
-
k = 3,
-
cookiestring = 'SOMECOOKIESPLEASE',
-
i,
-
j,
-
myArray = {};
請使用’On’在新版jQuery中,更短的 on(“click”) 用來取代類似 click() 這樣的函數。在之前的版本中 on() 就是 bind()。自從jQuery 1.7版本後,on() 附加事件處理程序的首選方法。然而,出於一致性考慮,你可以簡單的全部使用
on()方法。
-
// 糟糕
-
-
$first.click(function(){
-
$first.css('border','1px solid red');
-
$first.css('color','blue');
-
});
-
-
$first.hover(function(){
-
$first.css('border','1px solid red');
-
})
-
-
// 建議
-
$first.on('click',function(){
-
$first.css('border','1px solid red');
-
$first.css('color','blue');
-
})
-
-
$first.on('hover',function(){
-
$first.css('border','1px solid red');
-
})
精簡javascript一般來說,最好儘可能合併函數。
-
// 糟糕
-
-
$first.click(function(){
-
$first.css('border','1px solid red');
-
$first.css('color','blue');
-
});
-
-
// 建議
-
-
$first.on('click',function(){
-
$first.css({
-
'border':'1px solid red',
-
'color':'blue'
-
});
-
});
鏈式操作jQuery實現方法的鏈式操作是非常容易的。下面利用這一點。
-
// 糟糕
-
-
$second.html(value);
-
$second.on('click',function(){
-
alert('hello everybody');
-
});
-
$second.fadeIn('slow');
-
$second.animate({height:'120px'},500);
-
-
// 建議
-
-
$second.html(value);
-
$second.on('click',function(){
-
alert('hello everybody');
-
}).fadeIn('slow').animate({height:'120px'},500);
維持代碼的可讀性伴隨着精簡代碼和使用鏈式的同時,可能帶來代碼的難以閱讀。添加縮緊和換行能起到很好的效果。
-
// 糟糕
-
-
$second.html(value);
-
$second.on('click',function(){
-
alert('hello everybody');
-
}).fadeIn('slow').animate({height:'120px'},500);
-
-
// 建議
-
-
$second.html(value);
-
$second
-
.on('click',function(){ alert('hello everybody');})
-
.fadeIn('slow')
-
.animate({height:'120px'},500);
選擇短路求值短路求值是一個從左到右求值的表達式,用 &&(邏輯與)或 ||(邏輯或)操作符。
-
// 糟糕
-
-
function initVar($myVar) {
-
if(!$myVar) {
-
$myVar = $('#selector');
-
}
-
}
-
-
// 建議
-
-
function initVar($myVar) {
-
$myVar = $myVar || $('#selector');
-
}
選擇捷徑精簡代碼的其中一種方式是利用編碼捷徑。
-
// 糟糕
-
-
if(collection.length > 0){..}
-
-
// 建議
-
-
if(collection.length){..}
繁重的操作中分離元素如果你打算對DOM元素做大量操作(連續設置多個屬性或css樣式),建議首先分離元素然後在添加。
-
// 糟糕
-
-
var
-
$container = $("#container"),
-
$containerLi = $("#container li"),
-
$element = null;
-
-
$element = $containerLi.first();
-
//... 許多複雜的操作
-
-
// better
-
-
var
-
$container = $("#container"),
-
$containerLi = $container.find("li"),
-
$element = null;
-
-
$element = $containerLi.first().detach();
-
//... 許多複雜的操作
-
-
$container.append($element);
熟記技巧你可能對使用jQuery中的方法缺少經驗,一定要查看的文檔,可能會有一個更好或更快的方法來使用它。
-
// 糟糕
-
-
$('#id').data(key,value);
-
-
// 建議 (高效)
-
-
$.data('#id',key,value);
使用子查詢緩存的父元素正如前面所提到的,DOM遍歷是一項昂貴的操作。典型做法是緩存父元素並在選擇子元素時重用這些緩存元素。
-
// 糟糕
-
-
var
-
$container = $('#container'),
-
$containerLi = $('#container li'),
-
$containerLiSpan = $('#container li span');
-
-
// 建議 (高效)
-
-
var
-
$container = $('#container '),
-
$containerLi = $container.find('li'),
-
$containerLiSpan= $containerLi.find('span');
避免通用選擇符將通用選擇符放到後代選擇符中,性能非常糟糕。
-
// 糟糕
-
-
$('.container > *');
-
-
// 建議
-
-
$('.container').children();
避免隱式通用選擇符通用選擇符有時是隱式的,不容易發現。
-
// 糟糕
-
-
$('.someclass :radio');
-
-
// 建議
-
-
$('.someclass input:radio');
優化選擇符例如,Id選擇符應該是唯一的,所以沒有必要添加額外的選擇符。
-
// 糟糕
-
-
$('div#myid');
-
$('div#footer a.myLink');
-
-
// 建議
-
$('#myid');
-
$('#footer .myLink');
避免多個ID選擇符在此強調,ID 選擇符應該是唯一的,不需要添加額外的選擇符,更不需要多個後代ID選擇符。
-
// 糟糕
-
-
$('#outer #inner');
-
-
// 建議
-
-
$('#inner');
堅持最新版本新版本通常更好:更輕量級,更高效。顯然,你需要考慮你要支持的代碼的兼容性。例如,2.0版本不支持ie 6/7/8。摒棄棄用方法關注每個新版本的廢棄方法是非常重要的並儘量避免使用這些方法。
-
// 糟糕 - live 已經廢棄
-
-
$('#stuff').live('click', function() {
-
console.log('hooray');
-
});
-
-
// 建議
-
$('#stuff').on('click', function() {
-
console.log('hooray');
-
});
-
// 注:此處可能不當,應爲live能實現實時綁定,delegate或許更合適