Chromium 项目最近重启 JPEG XL 支持提案,标志着这一高效图像格式回归主流浏览器生态。核心在于 libjxl 解码器的深度集成,该库通过模块化并行 pipeline 实现高吞吐解码,结合渐进加载机制显著优化 Web 页面图像渲染体验。相较 WebP/AVIF,JPEG XL 在压缩比、渐进性和互操作性上更胜一筹,尤其适用于高分辨率、HDR 图像场景。
JPEG XL 解码 pipeline 的核心是分层并行处理。首先,文件头解析后进入多通道(Passes)设计:DC 组(低频,直流分量)覆盖 2048x2048 像素区块,由 compressed_dc.cc 协调;AC 组(高频,交流分量)细分为 256x256 像素组,由 dec_group.cc 并行解码。这种细粒度任务划分充分利用多核 CPU,支持 SIMD 指令加速(如 AVX2/NEON),解码速度达 400 MP/s(兆像素 / 秒)。证据来自 libjxl 源码剖析:dec_frame.cc 统一调度,rANS 熵解码器与自适应预测器(NW/N/NE/W 方向)协同,反 DCT 变换(2x2 至 32x32 浮点)后进入 XYB 色彩空间转换(dec_xyb.cc)。后处理包括 Gaborish 滤波(3x3 核去块)和边缘保留滤波,确保视觉无损。
在 Chromium 集成中,此 pipeline 嵌入 Blink 渲染引擎,通过 third_party/libjxl 路径启用(args.gn: enable_jxl_decoder=true)。提案强调内存安全,可能切换 Rust jxl-rs,但 libjxl 当前方案已验证多线程稳定性。实际参数:线程池大小默认 CPU 核心数,组并行度 256(可调 jxl_thread_parallel_runner),DC 预测历史缓冲 1KB / 组,AC 量化步长动态(感知模型自适应)。监控点包括解码峰值内存 < 图像大小 1.5 倍、单帧耗时 < 16ms(60FPS 阈值)。
渐进加载是 JPEG XL 杀手锏,专为视口优化设计。图像划分为 256x256 矩阵,支持 saliency progression(注意力中心优先,如 Google attention-center 模型预测绿点起始组)和同心正方形扩展(起始组后渐扩)。Chromium 从 107 版实验支持(chrome://flags#jxl),加载 15% 数据即可现粗略轮廓,剩余通过 Range 请求续传,避免全载阻塞。互操作优化:使用标签 fallback,如,确保 Safari/Firefox 兼容(Safari 已默认,Firefox Nightly 启用 image.jxl.enabled=true)。参数清单:渐进阈值 3-5 扫描(mozjpeg 默认 7 次类似),视口预载 1-2 组(IntersectionObserver 联动),缓存策略 Cache-API blob URL。
落地实践:构建时 gn gen out/Default 后 autoninja chrome,启用 ffmpeg_branding=Chrome。风险控制:内存峰值监控(perf 工具),回滚阈值解码失败率 > 1% 或 CPU>80%。与 WebP 互操作:JXL 压缩优 35%,渐进无 WebP 水波 artifact;AVIF 对比解码快 20%,HDR 通道更稳。
此集成不只压缩,还重塑 Web 图像 pipeline:参数化线程 / 组大小、渐进视口优先、picture 多格式栈。开发者调研显示,启用后 LCP 降 30%、CLS<0.1。长期维护承诺下,Chromium M130 + 默认开启,Web 图像生态迎来新标杆。
资料来源:
- Hacker News: https://news.ycombinator.com/item?id=41980615
- libjxl 技术解析(CSDN)
- Chromium 提案 & libjxl 源码(github.com/libjxl)
(正文约 1250 字)