使用新的Image()时javascript中的内存泄漏
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了使用新的Image()时javascript中的内存泄漏,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2297字,纯文字阅读大概需要4分钟。
内容图文
![使用新的Image()时javascript中的内存泄漏](/upload/InfoBanner/zyjiaocheng/951/3f0c321b48fa49b2ba2c10b36335aeb2.jpg)
我似乎有一个内存泄漏,由于在javascript脚本中使用’new Image()’.如果我在Windows资源监视器中观察使用过的物理内存,我会在加载页面时获得预期的内存增加,因为它使用如下方式加载一些非常大的图像:
var imgObjs = [];
// in for loop i = 0, 1, 2...
imgObjs[i] = new Image();
imgObjs[i].onload = function(event) {
// image loaded
}
imgObjs[this.img_src].src = this.img_src;
我会想,当页面被导航远离它会自动销毁引用并释放内存,但似乎并非如此.相反,我导航然后返回页面只有找到内存更多,因为它再次加载图像,而不会释放以前分配的内存.我已经尝试通过将代码放入unload事件来手动删除引用来执行此操作,但它似乎没有任何区别.这些变量最初都是用’var’声明的:
// allow garbage collection by removing references
$(window).unload(function() {
for(var i in imgObjs) {
imgObjs[i] = null;
delete imgObjs[i];
}
delete imgObjs
// delete other variables that reference the images
});
有没有人有任何关于我在哪里出错的指示?我认为问题可能与循环引用有关,因为我已经构建了一个列表类,其中每个项目包含对上一个和下一个图像的引用,但我已经深入了解如下:
delete galleries[i].pictures.Items[j].prev;
delete galleries[i].pictures.Items[j].next;
解决方法:
首先,当你转到另一个页面时,我知道没有浏览器泄漏,因为你有一个存储在JS数组中的图像.
如果在DOM< ==>之间有循环引用,则会有一些旧的浏览器泄漏JS,其中一些javascript引用DOM元素和DOM元素上的自定义属性引用相同的javacript对象,但这似乎不是你在这里所拥有的.
所以…如果你所看到的实际上从一个页面到另一个页面的泄漏,我会感到惊讶.如果您确信它是,那么创建一个可以与我们共享的普通网页或者显示问题的jsFiddle,并告诉我们您正在测试的确切浏览器以及您如何测量内存使用情况确定你有泄漏.
为了真正成为泄漏,每次你一遍又一遍地访问页面时,你必须始终看到内存使用率上升和上升.只是因为第二次进入页面时总内存使用率略高,并不意味着您有泄漏.浏览器有一些数据结构增长(到某一点)使用,如基于内存的缓存,会话浏览历史记录等…不表示泄漏.
第二,我没有看到你所展示的数据结构中的任何内容,这些数据结构说明了已知会导致旧版浏览器泄漏的循环引用.
第三,删除操作符用于从对象中删除属性.这就是它的全部.请参阅这些文章:Understanding Delete和MDN Delete以获得更多解释.因此,卸载处理程序中的清理代码未正确使用删除.您无法使用删除删除变量或数组元素.虽然我看不出有什么理由为什么这个代码是必要的,如果你打算拥有它,它将是这样的:
// allow garbage collection by removing references
$(window).unload(function() {
for (var i = 0; i < imgObjs.length; i++) {
imgObjs[i] = null;
}
imgObjs = null;
}
内容总结
以上是互联网集市为您收集整理的使用新的Image()时javascript中的内存泄漏全部内容,希望文章能够帮你解决使用新的Image()时javascript中的内存泄漏所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。