《JavaScript 高級程式設計》閱讀筆記 1:最佳實踐
- 2019 年 11 月 7 日
- 筆記
可維護性
可維護性包括:可理解性、直觀性、可適應性、可擴展性和可調試性
程式碼約定:
- 可讀性(縮進、注釋);
- 變數和函數命名(有意義的命名);
- 變數類型透明(
var a =null
var a = iSpeed
)
鬆散耦合:
- HTML 或者 CSS 與 JavaScript 的解耦(如 CSS 仍然保留樣式資訊,通過改變類名來改變樣式);
- 事件監聽器和應用邏輯的解耦(監聽器只發揮監聽作用,而將應用邏輯獨立成可以復用的函數)
編程實踐:
- 尊重對象所有權(盡量不要改動原生對象);
- 盡量避免創建全局變數和函數;
- 避免與 null 比較
- 使用常量
性能優化
- 優先使用局部變數。根據作用域鏈查找的原理,訪問全局變數速度會較慢
- 避免 with 語句。會延長作用域鏈長度
- 避免多次的屬性查找。屬性查找涉及原型鏈的追溯,花費時間長
- 優化循環:減值迭代、簡化終止條件、簡化循環體、使用
do...while...
、展開循環 - 使用數組字面量和對象字面量
- 最小化現場更新。對於已經載入出來的 dom 的直接操作(現場更新)會影響性能,可以考慮在新建的
fragment
文檔片段中進行修改,之後只進行一次現場更新。 innnerHTML
比普通的創建 dom 節點的方法更快- 同胞節點有相同的事件時利用事件委託冒泡給父節點,父節點的事件監聽器里結合 switch 進行
event.target
判斷 - 訪問 HTMLCollection 的屬性或者方法時,都是在文檔上進行查詢,這個過程會有性能開銷,應該最小化訪問 HTMLCollection 的次數。例如可以將 for 循環的終止條件判斷保存在一個值里,而不是每次都重新計算一次。