【问题标题】:How can you control memory usage in Cordova?如何在 Cordova 中控制内存使用?
【发布时间】:2015-08-29 01:49:27
【问题描述】:

我现在使用的是 iOS,但这个问题也适用于 Android。我正在查看 Xcode 中的内存图,我的应用程序在达到 240MB 左右时崩溃,我相信 iOS 正在杀死它,因为它占用了太多内存。

我可以通过在应用程序的页面之间导航来始终让它崩溃。 (这是一个 SPA,客户端 HTML 渲染。)如果我停止导航一分钟,内存将下降到 140MB。

这是 OSX Chrome 中的同一页面:

在这种情况下,停止导航后,内存不会自行减少。相反,图表末尾的悬崖是我按下垃圾收集按钮(将其从 170MB 降至 60MB)。

如何阻止我的应用崩溃?

  1. 是否有与我可以在 Cordova 中调用的垃圾回收按钮等效的功能?
  2. 我能否让 iOS 为我的应用提供特殊的大内存限额?
  3. 如果用户在一分钟内在页面之间导航 X 次,我可以设置一个超时屏幕,告诉他们在垃圾收集进行期间他们在下一分钟内无法使用该应用 XD
  4. 在 JS 呈现 HTML 时,有什么方法可以降低内存使用率?

此外,这是带有 HTML 节点的 Chrome 图表 - 按比例增长,但节点在垃圾回收后保持在同一级别。

【问题讨论】:

  • 您是否在 iOS 上对此进行了分析,尤其是对于泄漏?当您考虑在内存饥渴的 iOS 在设备中占据了一磅肉之后,还剩下什么给应用程序时,这似乎是一个很大的内存。而且我知道没有办法让 iOS 为你分配额外的内存,即使是“本机”应用程序也是如此。
  • 如果我错了,请纠正我,但我相信由于 UIWebView 中发生的所有事情,devtools 中的分析应该捕捉到与 iOS 分析会捕捉到的相同的东西?而且由于垃圾收集后堆下降到基线,这意味着没有泄漏?
  • 呃,我的错。我确实查看了本机 iOS 代码,发现了一些奇怪的东西。在github上发布一个问题,将得到答案。
  • @Loren 这个插件也适用于 Android 吗?
  • Android 没有 WKWebView 插件,但 Crosswalk 应该有帮助。

标签: javascript ios cordova web-applications single-page-application


【解决方案1】:

您可以尝试使用 WKWebView 插件,它有时可以减少 Cordova 应用程序的 iOS 内存使用量。

【讨论】:

  • 很高兴听到效果这么好!这是一个了不起的改进。
  • 其实我认为WKWebView内存一定不能包含在XCode内存图表[1]中,因为我还是会收到内存警告和崩溃。不过我想的少。 [1]github.com/practicalmeteor/meteor-wkwebview/issues/…
  • @Reubend Android 有类似的东西吗?
  • @SaulOrtega 是的,实际上 Android 也有类似的东西。 Crosswalk web view 可以提高旧设备的性能,尽管我认为它不会减少内存使用。请记住,它既有优点也有缺点。
  • 这个插件的性能提升令人难以置信 - 但我的视频文件不再使用我使用的播放器插件播放
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-25
  • 1970-01-01
  • 2017-04-24
相关资源
最近更新 更多