【发布时间】:2014-04-26 05:27:46
【问题描述】:
我正在处理大量数据。
机制:
JavaScript 正在读取 WebSQL 数据库,然后将数据组装成具有树结构的 Object。
然后应用于树对象 knockout.js(使元素可观察),然后是数据绑定
然后在最后应用 Jquery Mobile UI。
整个过程花费的时间令人无法接受。
我已经优化了从数据中生成树对象的算法,
还通过将项目直接推送到 ko.observable 数组并仅调用一次 hasMutated 来优化转换为 observables 机制。
我正在应用 knockout.js IF 绑定,以便在打开父级之前不处理 UI 中的不可见树节点。
性能是关键。
在 Chrome 开发人员工具中检查时间轴中的页面加载后,我注意到垃圾收集器在我构建树对象时对每个并发调用进行清理。
问题:有没有办法暂时禁用 Chrome GC,然后在我完成页面处理后再次启用它?
PS 我知道我可以添加对被收集部分的引用,基本上是引入控制和阻止 GC 收集的对象,但这需要通过代码进行大量更改,我不确定我是否可以保持足够长的时间,并且很可能会引入内存泄漏。肯定有更好的办法
【问题讨论】:
-
您确认性能问题出在 javascript 上,而不是 DOM 上吗?你可以注释掉
//ko.applyBindgs(viewmodel);,它会跳过所有的DOM变化,你可以测试纯javascript的性能。 -
你不能禁用GC,因为它的执行是在javascript上独立管理的,你只能通过开发者工具强制执行它
-
@BrettGreen 不,这与那个问题相反,它谈论强制 GC,而这个问题想要禁用 GC。
标签: javascript google-chrome knockout.js garbage-collection v8