時常看 Addy Osmani 的文章,這次他分享了在 Web development 上需要的一些知識,主要著重在 JavaScript 的 Performance 和 Memory usage。
在 Memory 的部分:
提到 Garbage Collection 的觀念,在大部分的狀況下我們是不需要主動地去對 Object 做 De-reference 的動作,因為 Browser 自己有一套回收的機制。盡量避免使用 delete 關鍵字,因為 JavaScript engine 在 runtime 的時候,會去對一些 Object 做最佳化,若 Object 的結構不會更動,會被判為 Hot object,若有所變更會判為 Slow Object。這邊我有點不是很瞭,可能用了 delete 會影響 runtime 時的 Performance 吧!
var o = { x: 1 };
delete o.x; // true
o.x; // undefined
另外設定一個 Object 成 Null ,並不是真的去清空 Object 的所有屬性與方法,只是很單純的將 Object 的 Reference 指向了 Null Object。指向 Null 會比用 delete 來的好,但似乎也是沒啥必要。
var o = { x: 1 };
o = null;
o; // null
o.x // TypeError
還有若宣告了一個 Global 的 Object,它被 GC 的狀況只有在 Refresh Page, Navigate 到其他 Page 和關掉 Tab 或 Browser。
總而言之:
1. 盡量不要手動去 De-reference,而應該將 variable 放在 Local Scope 來讓 GC 自動回收。
2. 在移除 Dom 前,記得要做 unbind event 的動作
3. 若有 local 的 data cache 不需要了,記得清掉
在 Performance 的部分:
主要在介紹一些 JavaScript 的寫法,如何最佳化 Application,如何去評估 Performance 等等。太多了....有興趣的可以到原文去看看。