我对javascript中的垃圾收集感到非常困惑,并且不确定何时发生。

我想知道是否每个页面更改都会收集所有垃圾。因此,制作一个多页应用程序可能值得,这样可以定期收集垃圾。

我特别感兴趣,因为Mobile Safari图片资源有限

This issue

or here is another one

所以我很好奇我是否有一个多页应用程序,如果这样做会使图像资源限制消失。

最佳答案

不是该主题的专家,但是我发现了以下内容:

这篇关于垃圾收集的出色的Smashing Magazine文章:Writing fast, memory-efficient Javascript(在“ Rules of Thumb”副标题的正上方)提到:


  “刷新页面,导航到其他页面,关闭选项卡或退出浏览器时,将清除全局变量。当变量超出范围时,将清除函数范围的变量。当函数退出并且不再存在时,引用它,该变量将被清除。” -SmashingMagazine文章


因此,是的,它是在每次页面更改时收集的,但是:


  …“但是在真实的代码模块或实际应用程序中进行测试,这些优化的真正影响可能比您期望的要小得多。”
  -SmashingMagazine文章


因此,与通过让浏览器自动收集垃圾相比,必须加载不同的资源可能会使您的应用性能遭受更大的损失(除非您的编码风格很糟糕)

本文提供了一个很好的示例,说明了如何垃圾收集每种类型的对象(变量,函数,闭包)。

此外,这篇标题为Why mobile web apps are slow的文章对垃圾回收在移动设备上实际上是一件坏事做了很长(但很棒的)解释,因为垃圾回收实际上会减慢应用程序的速度,除非它消耗的内存是所需内存的6倍(因此为什么在台式机和笔记本电脑上被认为是受欢迎的帮助)

其他参考:


How JavaScript closures are garbage collected-Stackoverflow
What is JavaScript garbage collection?-Stackoverflow

10-07 16:12