【筆記】改善javascript程式的188個建議27-33

來源:互聯網
上載者:User

標籤:web前端   javascript   效能   最佳化   

27、小心if隱藏的BUG


(1)if(a = 1){...}
把比較子錯寫為賦值運算子。
為了防止出現這樣低級令人討厭的錯誤,建議在條件運算式的比較運算中,把常量寫在左側,把變數寫在右側。這樣在你寫錯的時候,會報錯。
if( 1 == a){ ... }


(2)在if之後添加了分號(;)
if(a==1);{
...
}




28、使用查表法提高條件檢測的效能
當有大量離散值需要測試時,使用if和switch都比使用查表法要慢得多。
比如:

switch(value):case 0 :return result0;case 1 : return result1;case 2 : return result2;case 3 : return result3;case 4 : return result4;case 5 : return result5;case 6 : return result6;case 7 : return result7;case 8 : return result8;case 9 : return result9;default : return result10;}


改為:
var results = [result0,result1,result2,result3,result4,result5,result6,result7,result8,result9,result10];return results[value];




使用查表法時,必須完全消除所有條件判斷。操作轉換成一個數組項查詢或一個對象成員查詢。使用查表法的一個主要優點:由於沒有條件判斷,當候選值數量增加時,基本上不會增加額外的效能開銷。




29、準確使用迴圈體
在js提供的四種迴圈類型中,只有for in迴圈執行速度比其他迴圈明顯要慢。
除非需要對數目不詳的對象屬性進行操作,否則避免使用for in迴圈。




30、使用遞迴模式
遞迴函式會受到瀏覽器調用棧大小的限制。
當使用了太多的遞迴,超過最大調用棧尺寸時,瀏覽器會彈出錯誤資訊。
try{recurse();}catch(ex){alert('error info');}


當出現調用棧尺寸限制的問題時,第一步定位在代碼中的遞迴執行個體上。
兩種遞迴方式:
(1)直接遞迴:
function r(){r();}r();




(2)精巧模式:
function a(){b();}function b(){a();}




a();


常見的棧溢出原因是一個不正確的終止條件。如果條件是正確的,那麼演算法包含了太多層遞迴,為了能夠安全滴在瀏覽器中運行,應改用迭代、製表或混合模式。




31、使用迭代
使用迭代代替遞迴,速度會慢點,但是可以避免棧溢出錯誤。


32、使用製表(記憶遞迴)
比如,階乘可以改為:
function menfactorial(n){if(!memfactorial.cache){memfactorial.cache = {'0':1,'1':1};}if(!menfactorial.cache.hasOwnProperty(n)){memfactorial.cache[n] = n*memfactorial(n-1);}return memfactorial.cache[n];}




使用製表法設計階乘函數的關鍵是簡曆一個緩衝對象,此對象位於函數內部,其中預製了兩個最簡單的階乘,在計算階乘之前,先檢查緩衝中是否已經存在相應的計算結果。沒有對應的緩衝值說明這是第一次計算此數值的階乘,計算完成之後,結果存入緩衝中,供以後使用。




33、最佳化迴圈結構
(1)最佳化結構
(2)避免不必要的重複操作
不需要變化的東西,比如數組的聲明等,可以放在迴圈體外,不用每次都聲明。
(3)妥善定義迴圈變數




【筆記】改善javascript程式的188個建議27-33

聯繫我們

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