我有一个 GreaseMonkey 脚本,该脚本在一个使用框架作为其界面不可或缺的一部分的网站上运行。该脚本像筛子一样泄漏内存,我相信这是由于我在其中一个帧中使用了 addEventListener 造成的。很简单,我附加了各种事件侦听器,然后重新加载框架并附加事件侦听器,然后重新加载框架,当您与该框架或其他框架中的各种元素交互时,围绕数百甚至可能数千次迭代。到最后,Firefox 的内存从约 300M 增加到了 2G(或在到达之前崩溃)。
我在某处读到,执行整页重新加载将允许 FireFox 的垃圾收集例程启动并从孤立事件处理程序中恢复所有内存,当我在脚本运行一段时间后按 F5 时,果然在大约 10 秒内内存回落到300M。不幸的是,这打破了网站中的另一个框架(一个非常受欢迎的聊天窗口),所以虽然它似乎证实了我怀疑 addEventListener 是罪魁祸首,但它并不是真正的解决方案。
在不强制刷新整页的情况下,我还能做些什么来正确释放内存?
(目前使用的是 GM 1.5 和 FF 17,但从 GM 0.8/FF 4 左右开始就存在这个问题。)