【发布时间】:2015-08-29 01:49:27
【问题描述】:
我现在使用的是 iOS,但这个问题也适用于 Android。我正在查看 Xcode 中的内存图,我的应用程序在达到 240MB 左右时崩溃,我相信 iOS 正在杀死它,因为它占用了太多内存。
我可以通过在应用程序的页面之间导航来始终让它崩溃。 (这是一个 SPA,客户端 HTML 渲染。)如果我停止导航一分钟,内存将下降到 140MB。
这是 OSX Chrome 中的同一页面:
在这种情况下,停止导航后,内存不会自行减少。相反,图表末尾的悬崖是我按下垃圾收集按钮(将其从 170MB 降至 60MB)。
如何阻止我的应用崩溃?
- 是否有与我可以在 Cordova 中调用的垃圾回收按钮等效的功能?
- 我能否让 iOS 为我的应用提供特殊的大内存限额?
- 如果用户在一分钟内在页面之间导航 X 次,我可以设置一个超时屏幕,告诉他们在垃圾收集进行期间他们在下一分钟内无法使用该应用 XD
- 在 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