【发布时间】:2008-12-03 06:23:56
【问题描述】:
我有一个网页,它使用 jquery 来接收一些产品信息,因为人们正在看东西,然后显示最后看到的产品图像。这是一个 jquery AJAX 回调,看起来很像这样:
if(number_of_things_seen > 10) {
$('#shots li:last-child').remove();
}
$('<li><img src="' + p.ProductImageSmall + '"></li>').prependTo('#shots');
但是,它似乎泄漏了相当多的内存。从视觉上看,它做了正确的事,但足迹会无限增长。
Safari 的 DOM 检查器显示 DOM 是我期望的样子,但它似乎保留了对其显示的每个图像的引用(如在this screenshot 中看到的,以防有人感兴趣)。
我添加了
$('#shots li:last-child img').remove();
对删除声明没有明显影响。
是否有必要让浏览器释放这些东西?
【问题讨论】:
-
您找到泄漏了吗?如果你愿意,我会很感兴趣。
-
没有。它仍然像疯了一样泄漏。我已经完成了一个不同版本的应用程序,它具有相当不同的显示机制,但我仍然看到图像泄漏。
-
当你写一个测试用例时,比如说一个单一的 img 标签和一个 JavaScript 循环,它从一堆 URL 中替换它的 src 属性(没有 JS 框架,只是一个大的静态 URL 数组和一个三线路循环) - 它仍然泄漏吗?如果是这样,那你就不走运了,如果不是整个事情都可以解决。
-
更多工作,但通过没有缓存标头的 php 脚本提供图像,而不是直接调用它们。
标签: javascript jquery html ajax browser