高性能javascript--算法和流程控制

  • for,while和do-while性能至關
  • 避免使用for-in循環,==除非遍歷一個屬性量未知的對象==

es5:for-in 遍歷的對象便不侷限於數組,還能夠遍歷對象。es6

緣由:for-in每次迭代操做會同時搜索實例或者原型屬性, for-in 循環的每次迭代都會產生更多開銷,所以要比其餘循環類型慢,通常速度爲其餘類型循環的 1/7。所以,除非明確須要迭代一個屬性數量未知的對象,不然應避免使用 for-in 循環。若是須要遍歷一個數量有限的已知屬性列表,使用其餘循環會更快算法

  • foreach沒有for性能好

不能中斷循環(使用break或者return)數組

在 for 循環中可使用 continue,break 來控制循環和跳出循環,這個是 forEach 所不具有的。【在這種狀況下,從性能的角度考慮,for 是要比 forEach 有優點的。(一個長度爲100的數據,你for循環到35的時候,實現了功能,達到了目的的話,這個時候能夠 break 跳出循環的;使用 forEach 的話,是不能退出循環自己的。)】緩存

  • for-of

es6裏引入了一種新的循環方法,它就是for-of循環,它既比傳統的for循環簡潔,同時彌補了forEach和for-in循環的短板。函數

  • switch 與if else 效率比較

使用if-else 或者switch 是基於測試條件的數量:條件數量較大,傾向於使用switch 而不是if-else。這一般歸結到代碼的易讀性,若是條件較少時,if-else 容易閱讀,而條件較多時switch更容易閱讀。性能

優化if-else 的目標老是最小化找到正確分支以前所判斷條件體的數量。最簡單的優化方法是將最多見的條件體放在首位。測試

  • 判斷條件多時,使用查找算法,eg,二分查找,優於switch 與if else
  • memoization (經常使用於遞歸)

一種優化技術,主要用於經過存儲昂貴的函數調用的結果來加速計算機程序,並在再次發生相同的輸入時返回緩存的結果。優化

Memoization是JavaScript中的一種技術,經過緩存結果並在下一個操做中從新使用緩存來加速查找費時的操做。動畫

在這裏,memoization一般會縮短執行時間並影響咱們應用程序的性能。當咱們知道一組輸入將產生某個輸出時,memoization最有效。
遵循最佳實踐,應該在純函數上實現memoization。純函數輸入什麼就返回什麼,不存在反作用。
記住這個是==以空間換速度==,因此最好肯定你是否值得那麼作,有些場景頗有必要使用。
==在處理遞歸函數時,Memoization最有效,遞歸函數用於執行諸如GUI渲染,Sprite和動畫物理等繁重操做。==es5

相關文章
相關標籤/搜索