4

我正在开发一个类似幻灯片的网络应用程序,其中当前图像被绘制到画布上,您可以使用下一个/上一个按钮翻阅图像。加载图像someImage.src并且出于性能原因,我在用户查看第一张图像时在后台执行此操作。Firefox 在预加载期间分配了大量内存(比 Chrome 或 Safari 多 20-30 倍,甚至是 IE 的两倍)。此外,如果我更改幻灯片放映,我可以通过在后台加载幻灯片放映的 xml 描述(带有下拉菜单),而网站的 URL 保持不变,不会释放内存,但会释放很多新的被分配。直到我更改或重新加载网站的 URL Firefox 才会释放内存。此行为与所有其他浏览器不同。

那里发生了什么事?为什么 Firefox 如此饥渴?任何想法,如何解决?有没有办法强制 Firefox 释放内存或减少用于预缓存加载(但未显示)图像的内存?

4

2 回答 2

5

即使有时看起来 Firefox 分配的内存越来越多,这也可能具有欺骗性。Firefox 垃圾收集器的工作方式有些奇怪(对我来说)。在 Firefox 决定释放大量内存之前需要 2-8 分钟,这并不罕见。可能值得一看源代码。

但是,您可以通过设置null一些变量/引用来加快速度,这样垃圾收集器就有机会更早地检测到它应该放弃什么。对于画布元素/参考,这尤其是一个好主意。因此,轻松设置不再使用/需要的变量

myCanvasRef = null;

应该为你做一些工作。如果您仍然认为 Firefox 使用了太多内存,请打开一个新选项卡并输入about:memory。这将为您提供当前浏览器内存使用情况的详细视图。例如,您可以查看该内存是否用于 Javascript 代码、图像或其他对限制坏人非常有用的东西。

于 2011-08-23T09:55:31.203 回答
1

如果您来这里寻找“如何在 firefox 中强制 GC”,一种方法是导航到 about:memory,然后单击“gc”按钮。

不幸的是,这在我的特定情况下似乎没有多大帮助,但如果它对追随者有用的话,那就有它了。 关联

于 2016-05-12T23:24:54.790 回答