【问题标题】:Does a cordova multi-page app improve Garbage collection?科尔多瓦多页应用程序是否改进了垃圾收集?
【发布时间】:2014-08-09 02:55:24
【问题描述】:
我对 javascript 中的垃圾收集非常困惑,我不确定它何时会发生。
我想知道是否会在每次页面更改时收集所有垃圾。因此,制作一个多页面应用程序以便定期收集垃圾可能是值得的。
由于Mobile Safari 图片资源限制
,我特别感兴趣
This issue
or here is another one
所以我很好奇我是否有一个多页应用程序,这是否会使图像资源限制消失。
【问题讨论】:
标签:
javascript
cordova
garbage-collection
【解决方案1】:
到目前为止,我已经看到并了解到 Phonegap 自己没有任何垃圾收集机制。这完全取决于平台如何处理他们的网络视图。浏览器对 javascript 垃圾回收的处理方式也不同。
所以一个浏览器可能会以某种方式处理它,而另一个浏览器可能不会。我还想知道是否有人回答有关多页垃圾收集的问题。到目前为止,我认为它在平台上有所不同。
据我所知,ios 只会在需要时撤销垃圾回收。它使用 ARC(自动引用计数)另一方面,android 有本机代码来强制垃圾收集,如System.gc() 因此,当您需要在 android 中进行垃圾收集时,您可以从 JS 调用本机代码。无法告诉您为 ios 做什么。您可以查看基于平台的垃圾收集,这可能会帮助您了解更多信息。
【解决方案2】:
不是这方面的专家,但这是我发现的:
这篇关于垃圾收集的优秀 Smashing Magazine 文章:Writing fast, memory-efficient Javascript(就在“经验法则”副标题上方)提到:
“当您刷新页面、导航到其他页面、关闭选项卡或退出浏览器时,全局变量会被清理。当变量超出范围时,函数范围的变量会被清理。当函数退出并且没有更多对它的引用,变量被清理了。” - SmashingMagazine 文章
所以是的,它是在每次页面更改时收集的,然而:
[...] “但在真正的代码模块或实际应用程序中对其进行测试,这些优化的真正影响可能比您预期的要小得多。”
- SmashingMagazine 文章
因此,与让浏览器自动收集垃圾相比,你的应用可能会因为加载不同的资源而在性能上受到更大的影响(除非你的编码风格很糟糕)
这篇文章有一个很好的例子来说明每种类型的对象(变量、函数、闭包)是如何被垃圾回收的。
此外,这篇题为Why mobile web apps are slow 的文章很长(但很棒)解释了垃圾收集在移动设备上实际上是一件坏事,因为它实际上会减慢应用程序的速度除非它处理的数量是 6 倍所需的内存(因此它被认为是桌面和笔记本电脑上受欢迎的帮助)
更多参考资料: