gpt4 book ai didi

javascript - 有没有办法控制 Chrome GC?

转载 作者:搜寻专家 更新时间:2023-11-01 04:41:37 24 4
gpt4 key购买 nike

我正在处理大量数据。
机制:
JavaScript读取WebSQL数据库,然后将数据组装成树状结构的对象。
然后应用于树对象 knockout.js(使元素可观察)然后数据绑定(bind)然后在最后应用 Jquery Mobile UI。

整个过程花费了 Not Acceptable 时间。
我已经优化了从数据中创建树对象的算法,还通过将项目直接插入 ko.observable 数组并仅调用一次 hasMutated 来优化到 observables 机制的转换。我正在应用 knockout.js IF 绑定(bind),以便在打开父级之前不处理 UI 中的不可见树节点。

这里的性能是关键。
在 Chrome 开发人员工具中按时间轴检查页面加载后,我注意到在构建树对象时,垃圾收集器正在对每个并发调用进行清理。

Chrome timeline - we can see GC collecting items multiple times

问题:有没有办法暂时禁用 Chrome GC,然后在完成页面处理后再次启用它?

P.S 我知道我可以添加对被收集部分的引用,基本上是引入支配和阻止 GC 收集的对象,但这需要对代码进行大量更改,而且我不确定我能否将其保留足够长的时间,而且它很可能会引入内存泄漏。当然必须有更好的方法

最佳答案

不,没有办法禁用垃圾收集器。不可能,因为当请求更多内存但没有可用内存时,Chrome 应该做什么?

(此外,垃圾收集器非常细粒度和复杂;您的屏幕截图有点太小而无法阅读,但很可能您看到的是增量工作的小步骤以跟上分配,并且/或仅在发生新分配的相对较小的堆区域上运行的“次要 GC”周期。)

如果您想减少 GC 花费的时间,那么实现该目标的主要方法是分配更少和/或更小的对象。是的,这可能意味着更改您的应用程序的设计,以便重复使用对象而不是短暂的对象,或者类似的策略更改。

如果你分配很多,你会看到很多 GC 事件,这是没有办法解决的。即使在不被视为“垃圾收集”的语言/运行时也是如此,例如在 C/C++ 中使用 new/delete 很多也会有性能成本。

关于javascript - 有没有办法控制 Chrome GC?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22514835/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com