設定物件為null對於瀏覽器memory usage影響之測試

當不需要使用該物件時,將該object設定為null將可以讓javascript engine的garbage collector進行記憶體回收。

unusedObject = null;

在javascript中要釋放記憶體,基本上並不會用到delete,因delete和釋放記憶體並無直接關聯。

讓我們來做些測試,這邊會使用一個簡單的程式建立大量的物件陣列,且每個物件皆含有一個長度相當長的字串,目的是模擬大量大物件的情境。我們將會執行程式兩次:

  1. 單純建立物件陣列,建立後不設定為null
  2. 建立物件陣列,並於最後將物件陣列設為null

Test codes in github

程式分別於Chrome與Firefox執行,並使用profiles工具來確認程式所占用的記憶體大小

Chrome測試結果

  1. Snapshot 1: 11.1 MB
  2. Snapshot 2: 5.1 MB

Firefox測試結果

  1. 執行第一次: 14.19MB
  2. 執行第一次: 5.23MB

測試結果

結論

由測試結果可知,在物件不使用時將物件設為null可以有效地降低記憶體的占用率。若程式中有大量已經不使用的大型物件將可能造成記憶體不足之問題。

Reference

Memory Management@MDN

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.