gpt4 book ai didi

javascript - 在谷歌浏览器中强制垃圾收集

转载 作者:IT王子 更新时间:2023-10-29 03:06:11 26 4
gpt4 key购买 nike

我们正在使用 ZK 开发单页网络应用程序它不断与服务器通信并更新其屏幕的一部分。更新频率可以达到 1 秒。在这些更新期间,对大量 JS 对象的引用会丢失,这些对象最终必须由垃圾收集器清理。

据我们所知,Chrome 仅在不活动的标签页上运行其垃圾收集器。这对我们来说是一个问题,因为应用程序的选项卡通常处于事件状态并且几乎从不刷新,因此永远不会收集 JS 对象。如果保持事件状态足够长的时间,该选项卡最终会崩溃(Aww Snap 消息)。

我们需要手动启动垃圾回收。到目前为止,我们已经尝试使用 --js-flags="--expose-gc" 运行 Chrome 并运行 gc(),但它抛出异常:

ReferenceError: gc is not defined

这不会发生在 Firefox 上——内存使用或多或少是一个常量。

强制刷新页面不是一种选择。

我们将不胜感激任何和所有建议。

编辑:我们已经尝试在 Chrome 版本 23.0.1271.97 上运行 window.gc()gc() m25.0.1364.2 dev-m

最佳答案

您可以获取 Chrome Dev Tools 的代码,修改它,以便不时调用 ProfilerAgent.collectGarbage();(这是当您单击“收集垃圾”按钮时调用的代码在时间轴面板上)并使用 --debug-devtools-frontend 标志运行 Chrome 和你的 DevTools 版本。

然而,这个解决方案非常极端,只有在你真的绝望时才尝试。到那时,我建议分析您的应用程序并检查为什么 v8 决定不清理垃圾(或不能清理垃圾)。 DevTools 的时间线面板将帮助您解决这个问题。首先检查此面板底部的“收集垃圾”按钮是否真的起作用,如果没有 - 您可能有内存泄漏(至少,根据 v8)。如果是这样,请尝试 leak-finder-for-javascript .

[EDIT] 我删除了有关 chrome 扩展的信息,因为事实证明 gc() 可以在 --js-flags 时从网页代码中调用使用 ="--expose-gc"。至少在我的 23.0.1271.64 上。

关于javascript - 在谷歌浏览器中强制垃圾收集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13950394/

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