2014-09-06 633 views
1

我试图用URL.createObjectURL显示图像。但是,它需要很多内存,大约是图像大小的10倍。 这里是我的代码:URL.createObjectURL导致内存泄漏

var image = new Image(); 
image.src = URL.createObjectURL(blob); 
image.className = 'images'; 
image.onload = function(){ 
    URL.revokeObjectURL(this.src); 
}; 
$('.images').appendTo('body'); 

这是一个浏览器错误?或者我的代码有问题?

+0

尺寸差异是否可能由最终数据的编码 - Url引起? – TGlatzer 2014-09-06 09:06:32

+0

@ Grumbler85我不明白你的观点。我的变量blob是通过输入文件元素接收的本地图像。 – user3925697 2014-09-06 09:13:11

+0

@ user3925697你是如何认识到10倍的差距?我可否知道? – 2017-02-08 11:56:36

回答

4

实际上,如果您有明确卸载它们的安全时间,则在通过调用window.URL.createObjectURL()释放之前创建的现有对象URL时,请致电URL.revokeObjectURL()以获得最佳性能和内存使用情况。

但是,您不能通过创建对象来节省内存,请阅读此answer和此helper link

+0

感谢您的链接。顺便说一句,你的意思是这是一个浏览器错误? – user3925697 2014-09-06 09:25:23

+0

是的,浏览器可能会在未来解决这个问题:) – 2014-09-06 20:49:04