【发布时间】:2015-09-02 19:48:33
【问题描述】:
我正在使用 Knockout 和 jQueryMobile 编写一个我正在使用 Cordova 发布的应用程序。我编写了一个轻量级框架,用于混合 ko 视图模型和 jqm 页面元素。所有可观察对象都在视图模型对象中,在页面更改时为空,并且页面的所有 ui 定义都使用“with”或“模板”绑定,以便在 jqm 交换页面之前清除它自己的侦听器并删除页面的内部 dom 内容.这样,没有绑定是长期存在的,并且应该根据需要释放 dom。
在使用 chrome 调试器工具分析堆时,我仍然看到在导航应用程序时有数十到数百兆字节的累积泄漏。大多数(全部?)泄漏的对象是(或正在挂起的)分离的 dom 节点,这些节点只能从 jquery 缓存中访问。为了提高性能,我会接受内存命中,但是,用户抱怨移动设备的速度随着使用应用程序的时间长度而增加。
我很想简单地使用不同的 ui 库并完全删除 jquery,但这不是一个选项。
- 有没有办法禁用 jquery 缓存?
- 有没有办法手动清除 jquery chache?
- 还有其他建议吗?
编辑:经过更多研究,似乎问题与让淘汰赛处理 dom 操作有关。 jQuery 现在持有缓存的事件侦听器,因为它不知道附加到事件的节点现在已与 DOM 分离。具有讽刺意味的是,我的架构最近围绕敲除保持对分离节点的引用的反向情况进行了重组。似乎高级答案仍然是“永远不要使用两个操纵 DOM 的库”,但我会继续努力寻求一个不那么激进的解决方案。
【问题讨论】:
标签: javascript jquery cordova jquery-mobile knockout.js