Javascript 内存问题-Webkit是否缓存元素的CSS样式?

Javascript 内存问题-Webkit是否缓存元素的CSS样式?,javascript,memory,webkit,styles,Javascript,Memory,Webkit,Styles,我在当前项目中遇到了Windows上webkit浏览器的内存问题。 我将首先描述我所从事的项目,然后描述实际问题。请接受我对这篇长文章的歉意,我希望不要太多 我正在做一个项目,让你可以在线查看印刷杂志。对于iPad的支持,它是在HTML/CSS/JS(Mootools)中完成的,而不是在Flash中。 基本上,它一次显示两个页面,通过JSON加载新页面。 这个双页基本上是一个div,包含一个图像和一些额外的元素。 当一个双页看不到时,它的容器div将在所有图像“卸载”后从DOM中删除,方法是将它

我在当前项目中遇到了Windows上webkit浏览器的内存问题。 我将首先描述我所从事的项目,然后描述实际问题。请接受我对这篇长文章的歉意,我希望不要太多

我正在做一个项目,让你可以在线查看印刷杂志。对于iPad的支持,它是在HTML/CSS/JS(Mootools)中完成的,而不是在Flash中。 基本上,它一次显示两个页面,通过JSON加载新页面。 这个双页基本上是一个div,包含一个图像和一些额外的元素。 当一个双页看不到时,它的容器div将在所有图像“卸载”后从DOM中删除,方法是将它们的“src”设置为1px白色jpg,并且我尝试在div从DOM中删除之前清空并删除它的所有属性

Firefox、Opera和IE都能正确地卸载,我可以看到RAM的使用量保持不变,无论我查看多少页面——新页面被加载,旧页面被加载。或者,至少您可以看到,有时内存会被释放到正常值,这可能是通过垃圾收集实现的

另一方面,Safari和Chrome根本不会释放任何内存,而且内存使用率会随着每个新页面的浏览而增加。所以RAM被越来越多地填满,可能直到没有可用的了。 当您返回并查看已加载的页面时,内存使用保持不变

现在,我认为内存是用来以某种方式缓存加载的图像的,但我发现,当您从Safari的developer菜单中禁用样式时,RAM的使用量总是下降到相同的“正常”值,不管以前是什么。 这意味着:如果您查看了大量页面,Safari占用了大约500MB的RAM,并且禁用了样式,RAM使用量将下降到120MB左右。 现在,如果您查看更多页面,让Safari占用超过1GB的RAM,并且禁用这些样式,RAM的使用量将再次下降到120MB左右


因此,我得出的结论是,RAM并没有被图像数据耗尽,而是被某种样式相关的数据耗尽。对我来说,这就是巫术或伏都教:从现在起,我真的不知道如何解决这个问题。我在研究这个问题时遇到了困难,可能我甚至还没有发现它。

嗯。我有点怀疑它是否真的故意保留了样式数据。。。我怀疑这只是因为WebKit的内存缓存在丢弃资源方面很懒惰,需要一些东西来将其付诸行动。切换样式表可能会导致大量背景图像现在未使用,因此我猜他们正在使用它作为内存缓存清理的触发器。可能还有其他触发因素


我不确定WebKit的内存缓存启发法是什么,但如果像页面加载的图像这样的资源无限期地保存在内存缓存中,至少只要有足够的工作内存,我也不会感到惊讶。

这似乎是WebKit中的一个bug,您是否在他们的bug追踪器上发布了bug报告:?你可能还想试试WebKit邮件列表,因为那里的人可能比访问者有更多关于可能出现的问题的信息。我没有发布错误报告,我也不能说这是否是一个错误。我应该设置一个测试用例。我确实应该参与webkit邮件列表,谢谢你的想法。