2012-02-20 28 views
9

我很疑惑为什么我的应用程序的内存在Firefox中的速度比其他浏览器快得多。重型AJAX应用程序中的Firefox特定内存增加

基本上,应用程序使用了相当数量的AJAX,基本操作是加载具有平均HTML级别的帖子的新集合,并且通常具有大图像。每个帖子的平均数据量(包括加载的图片)小于1MB,大概为900k。使用jQuery 1.7.1。

在Chrome内存似乎是稳定的,但在Firefox中,每个后期加载导致大约20MB的新内存使用。由于大量帖子被加载,你很快就会在内存中超过1GB甚至1.4GB,并且事情很快就会停止。

在Firefox上挖掘,我试图用'删除'来消除闭包和任何无关变量。没有太大的改善。然后我开始删除功能,并且似乎所有事情都做出了贡献。

删除工具提示,一些过​​多的FB小部件重新加载(每个帖子一个评论小部件),我做了很大的改进,每篇文章降低到10MB的新内存。

但除此之外,我不能低得多!基本上,如果我只是通过$ .post()加载新的html +图像(再次约900k),每个帖子都会添加〜8mb的新内存,即使新图像具有“display:none”。 (也尝试禁用萤火虫)。

这是我第一次尝试进行内存管理,但这看起来像是一个很大的开销,并且很奇怪,因为我不认为内存真的会像Chrome那样增加。似乎我应该让内存的增加更符合加载的数据量,而不是10倍! (或者根本就没有像Chrome那样好......)

这真的很合理吗?任何关于在哪里寻找问题的想法,或者我可以做些什么来进一步减少这个问题?

谢谢!

更新

作为鲍里斯恰当地观察到的,存储器的增加几乎完全是由于图像(至少80%)。但是,内存的增加再次是所加载图像的大小(10倍)。我学习的另外一件事是:内存 - 如果我只是打开一个新的空标签,内存会迅速下降,几乎所有添加的图像相关的内存都会消失。我猜这就是GC踢的,因此就像鲍里斯猜测的那样,这似乎是GC问题?

如果是这样的话,我该如何调查为什么它不是自然地只在FF中被触发?有没有方法在JS中触发它?正如我提到的,我试图通过并删除关闭...

另一个想法,可以绑定事件(通过jQuery)的图像元素而不是divs是坏的?我认为jQuery处理所有这些东西。

+1

你在Firefox中运行Firebug吗?如果是这样,如果你禁用它会发生什么? – 2012-02-21 03:00:15

+0

正如我在问题中提到的 - 我尝试禁用萤火虫。没有区别。 – 2012-02-22 09:13:59

+0

这很奇怪。你能链接到显示问题的网站吗? – 2012-02-22 16:27:21

回答

1

如果您真的使用了很多ajax,您可以尝试将$ .ajax()选项的“cache”设置为false。但是,它必须有大量的数据才能对浏览器内存产生影响。

由于性能方面的原因,您通常希望在内存中尽可能多地进行操作,并尽可能少地写入DOM。

它可能只是因为你正在使用的FF版本不是回收内存以及你正在比较的其他浏览器。

在我看来,封闭不是罪魁祸首。这似乎更像是一个旧的IE问题。

如果确实是一个问题,当你知道它们不再被使用时,你可以尝试明确地销毁大型对象。

1

不一定是答案,但是你有最新版本的Firefox(13)的这些问题吗?这个版本存在很多与内存和性能相关的问题,而且Mozilla说他们正在努力修复它们。另外,如果你有很多页面加载的项目,并没有显示它们,最初你可以使用jquery的waypoints插件来动态加载这些图像。这可以减轻浏览器在页面加载时的负担。

希望这有助于。这里是一些阅读材料,可以帮助您进一步:

http://support.mozilla.org/en-US/kb/firefox-slow-how-make-it-faster http://support.mozilla.org/en-US/kb/firefox-uses-too-much-memory-ram

http://imakewebthings.com/jquery-waypoints/

2

我看到我的打击RAM为2GB

我在码头窗口小部件触发此命令被保存在一个文件:

killall -c firefox 
sleep 1 
open -a Firefox 
sleep 1 
exit 

快速重置FF并重新获得所有制表符的方法。最需要这样做的日子:) 如果它不是萤火虫我现在在Chrome上

相关问题