decoding属性有sync、async、auto三个值:sync强制主线程同步解码,适用于关键首屏图或需精确naturalWidth/Height的场景;async异步解码,避免阻塞主线程,适合大多数内容图;auto为默认值,由浏览器自主决策。
decoding属性值有哪些,分别什么含义
是
标签的原生属性,用于提示浏览器如何解码图像数据,不改变加载时间,只影响解码阶段的执行线程。它有三个可选值:
:同步解码,强制在主线程完成解码后才渲染,适合小图标、关键首屏图(如 logo),确保像素级渲染时序
:异步解码,解码任务移交到后台线程,避免阻塞主线程,大幅降低交互卡顿风险,适用于大多数内容图、大图、懒加载图
:默认值,由浏览器自主决策,但实际中多数现代浏览器(Chrome ≥ 87、Firefox ≥ 78、Safari ≥ 16.4)对非
图默认走异步路径,不可依赖
什么时候必须用 decoding="sync"
只有两类场景建议显式设为
:
需要精确读取
/
并立即参与布局计算(比如动态生成 canvas 贴图、CSS Grid 容器尺寸依赖)
图片作为 UI 基础元素且存在严格帧同步要求(如动画序列帧第一帧、实时滤镜预览入口图),否则可能因解码延迟导致视觉撕裂或 layout thrashing
注意:
不等于“更快”,反而会延长主线程占用时间;多数 banner 图、文章配图、用户头像都不属于这个范畴。
decoding="async" 实际效果与常见误用
加了
后,浏览器会在图像加载完成后,在工作线程中解码,主线程可继续响应滚动、点击等操作。实测 Chrome DevTools 的 Performance 面板中,“Image Decode”任务会从 Main 线程移出。
立即学习
“
前端免费学习笔记(深入)
”;
使用HTML,CSS,JavaScript开发Android应用程序 英文文字pdf版附源文件
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
下载
错误做法:给所有
统一加
却忽略
—— 滚动前就触发解码,浪费资源
错误做法:在
内部的每个
上写
—— 该属性仅对
有效,
忽略
正确搭配:
+
+ 显式
/
,三者协同压制 CLS 和主线程抖动
示例:
兼容性与 fallback 注意点
属性在 Chrome 64+、Firefox 69+、Edge 79+、Safari 16.4+ 中完全支持;旧版 Safari(≤16.3)和 IE 全系忽略该属性,无报错也不生效。
无需 JS 检测或 polyfill —— 它是纯提示型属性,不支持即降级为
行为
不要把它和
混用做“跨域解码优化”——二者无关,
只影响请求头和 CORS 错误抛出逻辑
服务端返回的图片格式(WebP/AVIF/JPEG)不影响
行为,但 AVIF 解码更重,此时
收益更明显
真正容易被忽略的是:即使写了
,若图片本身未设置
和
,仍会因布局跳动引发强制同步重排,抵消掉大部分解码优化效果。
decodingsyncasyncautosyncsyncimg.naturalWidthimg.naturalHeightsyncdecoding="async"decoding="async"loading="lazy"decodingdecoding="async"loading="lazy"widthheightdecodingautocrossorigincrossorigindecodingasyncdecoding="async"widthheight