Chromium-Gecko-WebKit差异清单
版本数字会过期。下表记的是 机制差异,落地以当前目标浏览器实测为准。探测方法见 OffscreenCanvas 与引擎差异。
1. 表面与 hint
| 能力 | Chromium | Gecko | WebKit |
|---|---|---|---|
willReadFrequently 倾向软件光栅 | 明显 | 读回仍贵,路径不一定同等 | 读回贵 |
desynchronized | 常可用,仍要读 attributes | 保守 | 保守 |
colorSpace: display-p3 | 支持则 attributes 能读回 | 跟版本 | Safari 有,WebView 不一定 |
transferControlToOffscreen + 2d Worker | 成熟 | 可用但边角多 | 到得晚,失败要降级主线程 |
Worker requestAnimationFrame | 跟文档 vsync | 同 | 同;不可用时黑屏 |
共同:已经 getContext 的 canvas 不能 transfer。这不是引擎差异,是规范。
2. 文字与路径
| 项目 | 差异 |
|---|---|
actualBoundingBox* | 对 ink 计算不一致,命中盒不要跨引擎像素级对拍 |
| 系统字体 fallback | 中英混排 width 不能当快照金标 |
roundRect / letterSpacing / fontKerning | 进入 2D 的时间不同,赋值后读回检测 |
Path2D.addPath + matrix | 大体可用;极端 scale 下命中误差 |
filter | 能跑不等于能实时;Safari 大 blur 更易卡 |
3. 输入与布局
| 项目 | 差异 |
|---|---|
device-pixel-content-box | Chromium 先;Safari 要 try/catch 回退 |
offsetX 在 CSS transform 下 | 全不可靠,统一 client + bounding rect |
getCoalescedEvents | 笔设备上 Chromium 最完整 |
ctrl+wheel pinch | 桌面 Chromium 常见;Firefox 行为不同,都要测 |
iOS visualViewport | 键盘顶起改变高度,只听 window.resize 会漏 |
4. 导出与媒体
| 项目 | 差异 |
|---|---|
toBlob image/webp | 探测 isTypeSupported / 试编码 |
MediaRecorder + captureStream | Safari mime 集合窄,vp9 常不行 |
requestVideoFrameCallback | 以 CanIUse/当前版本为准,无则 rAF 降级 |
| JPEG 透明 | 底色引擎填黑或白,不要依赖 |
5. 内存
iOS / iPadOS 对 backing store 最狠。多层 × 3x DPR × 全屏是杀进程套餐。WKWebView 比 Safari 同版本更紧。见 DPR 封顶。
Android WebView 随厂商内核,不能用 Chrome 版本号推断。
6. 怎么维护这张表
不要在业务里写 if (safari && version < 17)。写 detectCanvasCaps() + 单测矩阵(最新 Chrome / Firefox / Safari / iOS Safari)。差异清单只解释 为什么探测会失败。
权威资料
核对日期:2026-08-26