javascript提出了一些獨(dú)一無(wú)二的性能挑戰(zhàn),這與你組織代碼的方式有關(guān)。隨著WEB應(yīng)用變得越來(lái)越高級(jí),包含的javascript代碼也越來(lái)越多,各種模式和反模式也逐漸出現(xiàn),為了編寫(xiě)更高效的代碼,請(qǐng)牢記以下編程實(shí)踐:
1.通過(guò)避免使用eval()和Function()構(gòu)造器來(lái)避免雙重求值帶來(lái)的性能消耗。同樣的,給setTimeout()和setInterval()傳遞函數(shù)而不是字符串作為參數(shù);
2.盡量使用直接量創(chuàng)建對(duì)象和數(shù)組。直接量的創(chuàng)建和初始化都比非直接量形式要快;
3.避免做重復(fù)的工作,當(dāng)需要檢測(cè)瀏覽器時(shí),可使用延遲加載?或?條件預(yù)加載;
4.在進(jìn)行數(shù)學(xué)計(jì)算式,考慮直接操作數(shù)字的二進(jìn)制形式的位運(yùn)算;
5.javascript的原生方法總會(huì)比你寫(xiě)的任何代碼都要快,盡量使用原生方法;
延遲加載:
function addHandler(target,eventType,handle){
????if(terget.addEventListener){
? ? ? ? addHandler = function(target,eventType,handle){
? ? ? ? ? ? target.attachEventListener(eventType,handle,false);
? ? ? ? }
? ?}else{ ? ? ? ?// IE
? ? ? ? ?addHandler = function(target,eventType,handle){
? ? ? ? ????? ? target.attachEvent("on"+eventType,handle);
? ? ????? ? }
????????}
??? ?addHandle(target,eventType,handle);
}
條件預(yù)加載:
var addHandle = document.body.addEventListener? function(target,eventType,handle){
? ????? target.addEventListener(eventType,handle,false);
????}:function(){
? ??????target.attachEvent("on"+eventType,handle);
}
三目運(yùn)算符加以判斷;