URL.createObjectURL() 和 new FileReader()在读取预览文件时区别

URL.createObjectURL() 和 new FileReader()在读取预览文件时区别

URL.createObjectURL() MDN 静态方法会创建一个 DOMString,其中包含一个表示参数中给出的对象的URL。
这个 URL 的生命周期和创建它的窗口中的 document 绑定。这个新的URL 对象表示指定的 File 对象或 Blob 对象。

URL.createObjectURL(blob)和FileReader.readAsDataURL(file)很相似

主要区别

通过FileReader.readAsDataURL(file)可以获取一段data:base64的字符串通过URL.createObjectURL(blob)可以获取当前文件的一个内存URL

如:blob:http://localhost:5173/8c36c7ff-7be3-4dbb-a8c4-e87317d21c4b

执行时机:

createObjectURL是同步执行(立即的)

FileReader.readAsDataURL是异步执行(过一段时间)

内存使用:

createObjectURL返回一段带hash的url,并且一直存储在内存中,直到document触发了unload事件(例如:document close)或者执行revokeObjectURL来释放。

FileReader.readAsDataURL则返回包含很多字符的base64,并会比blob url消耗更多内存,但是在不用的时候会自动从内存中清除(通过垃圾回收机制)

兼容性方面两个属性都兼容ie10以上的浏览器。

优劣对比:

使用createObjectURL可以节省性能并更快速,只不过需要在不使用的情况下手动释放内存

如果不太在意设备性能问题,并想获取图片的base64,则推荐使用FileReader.readAsDataURL


__EOF__

本文作者龙陌
本文链接https://www.cnblogs.com/longmo666/p/18712183.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   龙陌  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 上周热点回顾(2.17-2.23)
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· spring官宣接入deepseek,真的太香了~
点击右上角即可分享
微信分享提示