使用 XHR 请求加载图像
Loading images with XHR Request
我想创建一个图像进度条库,所以我在加载图像时需要一个事件来更新进度条(例如 onprogress
(
假设我要加载所有图像并创建一个 XHR 请求以具有onprogress
事件,所以我需要知道这些场景之间是否有任何区别:
第一:
1-使用XHR请求
加载图像2-附加img
标签,指向图像网址(例如 <img src='boo.png' />
(
第二:
1-使用XHR请求
加载图像2- 在 XHR 响应的 base64 后附加一个 img
标签(例如 <img src='data:image/png;base64,==Ad3tr' />
(
编辑:姗姗来迟地意识到你不是在问IMG .vs. XHR图像加载,而是使用XHR的两种不同方法。 在下面保留我的原始答案,因为它包含有关IMG .vs. XHR差异的信息,这些信息可能仍然在这里引起人们的兴趣。
简而言之,在整体复杂性方面存在相当大的差异。 使用数据 url 将 XHR 数据放入 IMG 对象是一个不平凡的问题 - 请参阅此 SO 问题。 它依赖于可能不完全支持的新 API,并且存在多种性能影响:加载所需 JS 的页面加载时间增加、对响应数据进行编码所需的 CPU 周期以及垃圾回收所需的所有额外内存所需的额外时间。
我整理了一个jsperf测试来比较这两种方法,但请注意,数据URL测试是不完整的(!( - 它实际上并没有产生一个有效的URL,但它确实是utf8 + base64,所以它可能并不可怕。 但是,如果有的话,它比你最终得到的要快。
基本上我想不出使用数据 url 的任何优势,除了它避免了依赖浏览器缓存......但我希望这只不过是一个理论上的反对意见
使用基于 XHR 的图像加载,您正在处理...
-
对提取二进制(图像(数据的有限支持:XHR
responseType
属性旨在允许这样做,但并非在所有浏览器上都可用。 因此,您需要在那里研究解决方法。 -
对 base64 编码的支持有限。 IE9-不支持
atob
,因此你必须依赖JS填充程序。 这将对 CPU 和垃圾回收产生性能影响,这可能与您有关,也可能不与您有关。 - 对提取跨域资源的支持有限。 XHR 请求必须是同源的,除非您实现对 CORS 的服务器支持。 而且,并非所有浏览器(IE9-,毫不奇怪(都完全支持CORS。
- 在通过child.print()打印之前,我如何等待图像加载到我的新窗口中
- 在检索数据时是否可以停止图像加载请求
- 如何让我的网站上的WEBP图像加载在morzilla firefox中有一个可能的解决方案吗?如果是,那么如何
- jQuery:获取图像加载错误的详细信息
- 在safari和chrome中,js图像加载产生了奇怪的结果
- 图像加载不适用于 IE 8 或更低版本
- 这个图像加载功能有什么作用
- JavaScript 图像加载器不起作用
- 动态图像加载是否会减少服务器过载
- 跨来源图像加载被拒绝-仅限iPhone-简单图像上传
- 纯javascript的进度图像加载程序仅当用户单击提交html表单时
- 使用JavaScript延迟图像加载
- 如果当前图像加载缓慢,如何加载其他图像
- HTML图像加载触发一个错误
- 将图像加载到localStorage,并将图像src设置到该位置
- jquery图像加载检查错误
- 将图像加载到织物画布背景中
- 需要在bootstrap css中单击时将图像加载为模态
- 正在显示加载..在将新图像加载到网站时播放动画
- 砖石事件:在图像加载和布局完成后调用事件