【发布时间】:2015-08-19 14:23:52
【问题描述】:
我有一个包含大量生成的 JavaScript 的网络应用程序。在桌面上的 Chrome 中运行网络应用程序与在(更新的)iPad 上在UIWebView 中运行网络应用程序相比,内存消耗相差 6 倍。
为了让 iOS 上的内存消耗与 Chrome 相当,我应该避免哪些构造或模式?
生成的 JavaScript 的特征:
- 代码由Haxe生成。
- 代码是“面向对象”的,因为它大量使用
prototype,但在civilized way 中。 - 代码大量使用 JavaScript 对象上的命名索引来实现哈希表。
- 有很多字符串,但几乎没有任何字符串连接。
似乎没有任何内存泄漏; iOS 上过多的内存消耗会在构造(固定的)Javascript 对象时立即显示出来。
【问题讨论】:
-
请注意,UIWebView 使用较旧的 Javascript 引擎,它在 iOS 上执行 JS 的速度比 Safari 慢。如果你在 Safari 中运行代码,运行速度够快吗?
-
网络应用程序应该从 Safari 运行,我只使用 UIWebView 让 XCode 查看内存消耗,这就是问题所在(即 Safari 不时重新加载页面)。执行速度不是问题。
-
Mobile safari 使用 WKWebView,因此您的应用应该实例化其中之一来进行比较。您可能还想将
v8和javascriptcore添加到标签中,以便这两个 JS 引擎的专家可以参与进来。 -
您是否尝试在专用 github 上打开问题? github.com/HaxeFoundation/haxe/issues
-
我认为没有任何模式可用于解决有缺陷的实现。它可能只需要比 V8 更多的内存。
标签: javascript ios v8 haxe javascriptcore