我很疑惑为什么我的应用程序的内存在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处理所有这些东西。
你在Firefox中运行Firebug吗?如果是这样,如果你禁用它会发生什么? – 2012-02-21 03:00:15
正如我在问题中提到的 - 我尝试禁用萤火虫。没有区别。 – 2012-02-22 09:13:59
这很奇怪。你能链接到显示问题的网站吗? – 2012-02-22 16:27:21