我正在使用Knockout和jQueryMobile来编写我正在使用Cordova发布的应用程序。我已经编写了一个轻量级框架,用于混合ko视图模型和jqm页面元素。所有可观察对象都在视图模型对象中,这些对象在页面更改时为空,并且页面的所有ui定义都使用“with”或“template”绑定,以便knockout清除它自己的侦听器并在jqm交换页面之前删除页面的内部dom内容。这样,没有绑定是长寿的,dom应该在必要时释放。
使用chrome调试工具分析堆时,我仍然看到导航应用程序时泄漏了几十到几百个累积兆字节。大多数(全部?)泄漏的对象都是(或正在悬挂)只能从jquery缓存中访问的分离的dom节点。我可以通过内存命中来提高性能,但是,用户抱怨移动设备的速度会随着使用应用程序的时间长度而增加。
我很乐意只使用不同的ui库并完全删除jquery,但这不是一个选项。
编辑:经过一些研究,似乎问题与让淘汰赛处理dom操纵有关。 jQuery现在正在持有缓存的事件侦听器,因为它不知道附加到事件的节点现在已经与DOM分离。具有讽刺意味的是,我的架构最近围绕淘汰的反向情况进行了重组,保留了对分离节点的引用。似乎高级答案仍然“永远不会使用两个操纵DOM的库”,但我会继续努力寻求一个不那么激进的解决方案。
答案 0 :(得分:0)
文档说只是将其设置为false:
MapFragment
http://demos.jquerymobile.com/1.0.1/docs/pages/page-cache.html
仅供参考 - 它们不是分离的DOM节点,它们实际上仍然在DOM中。