【问题标题】: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

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

【问题讨论】:

  • 您可以查看taco.visualstudio.com/en-us/docs/better-web-performance 基本上,有几页意味着您将清除前一页中的所有内容,并且您将确保您最终不会泄漏内存太久。不利的一面是,您总是会重新加载整个页面(重新加载 JS,重新创建所有 DOM 元素,...)。对于你的image resource limit 问题,也许你想使用一个虚拟列表,即只渲染可见的图像。

标签: 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 倍所需的内存(因此它被认为是桌面和笔记本电脑上受欢迎的帮助)

    更多参考资料:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多