我正在处理非常大量的数据。
机制:
JavaScript正在读取WebSQL数据库,然后将数据组合成具有树结构的对象。
然后应用于树形对象knockout.js(使元素可观察),然后数据绑定,最后在其上应用Jquery Mobile UI。
整个过程需要不可接受的时间。
我已经优化了将数据转换为观察机制中的树形对象的算法, 还通过将项目直接推入ko.observable数组并仅调用一次hasMutated来优化转换到可观察机制的机制。 我将knockout.js IF绑定应用于UI中的不可见树节点以避免处理父级打开之前的节点。
性能至关重要。
在Chrome开发人员工具的时间轴中检查页面加载后,我注意到垃圾回收器在构建树形对象时对每个并发调用进行清理。
问题:是否有一种方法可以暂时禁用Chrome GC,然后在完成页面处理后再启用它?
附言:我知道我可以添加对被收集的部分的引用,基本上介绍支配对象并防止GC收集,但这将需要代码中的实质性更改,而且我不确定我能够保持足够长的时间,而且很可能会引入内存泄漏。肯定有更好的方法。
机制:
JavaScript正在读取WebSQL数据库,然后将数据组合成具有树结构的对象。
然后应用于树形对象knockout.js(使元素可观察),然后数据绑定,最后在其上应用Jquery Mobile UI。
整个过程需要不可接受的时间。
我已经优化了将数据转换为观察机制中的树形对象的算法, 还通过将项目直接推入ko.observable数组并仅调用一次hasMutated来优化转换到可观察机制的机制。 我将knockout.js IF绑定应用于UI中的不可见树节点以避免处理父级打开之前的节点。
性能至关重要。
在Chrome开发人员工具的时间轴中检查页面加载后,我注意到垃圾回收器在构建树形对象时对每个并发调用进行清理。
问题:是否有一种方法可以暂时禁用Chrome GC,然后在完成页面处理后再启用它?
附言:我知道我可以添加对被收集的部分的引用,基本上介绍支配对象并防止GC收集,但这将需要代码中的实质性更改,而且我不确定我能够保持足够长的时间,而且很可能会引入内存泄漏。肯定有更好的方法。
//ko.applyBindgs(viewmodel);
,这将跳过所有DOM更改,然后你就可以测试纯JavaScript性能了。 - user1375096