FileReader 与 window.URL.createObjectURL

我正在建立一个移动网站,我想使用相机 API 拍照。图像应该显示在网站上,并上传到一个服务器。根据 MDN 上的 Camera API 简介的图像可以访问和显示在网站上使用 FileReaderwindow.URL.createObjectURL。我用 iPad (Safari 和 Chrome)和 Android 平板电脑(Chrome 和 Firefox)成功地实现了 测试的这些可能解决方案。

FileReaderwindow.URL.createObjectURL有什么不同?我认为 window.URL.createObjectURL是较新的,但还不是一个标准。表演有什么不同吗?

48648 次浏览

这是有区别的。

  1. 时间
  • 同步执行 createObjectURL(立即)
  • FileReader.readAsDataURL异步执行(一段时间后)
  1. 内存使用情况
  • createObjectURL返回带哈希的 url,并将对象存储在内存中,直到文档触发卸载事件(例如文档关闭)或执行 revokeObjectURL
  • FileReader.readAsDataURL返回包含许多字符的 base64,并且比 blob url 使用更多的内存,但是当您不使用它时(通过垃圾收集器)将其从内存中删除
  1. 支持
  • 来自 IE10和所有现代浏览器的 createObjectURL
  • 来自 IE10和所有现代浏览器的 FileReader.readAsDataURL

对我来说,最好使用 blob url (通过 createObjectURL) ,它更有效、更快,但是如果你使用很多对象 url,你需要 通过 revokeObjectURL释放这些 url (释放内存)。

例如,您可以在 Image onload 处理程序中调用 URL.revokeObjectURL,Image 对象将保留图像数据,而不会丢失它,Nahuel Greco (c)。