用 Baseline 判断 Web 特性能不能上:Dashboard 查询语法、HTTP API 与 WPT 测试约定
背景问题
浏览器是 evergreen 的,每个月都有新特性进入稳定版。怎么知道某个 CSS 属性或 Web API 现在能不能放心用?以前只能翻 Can I Use 靠经验猜。
Baseline 是什么
Web Platform Baseline(简称 Baseline)给出「哪些 Web 平台特性现在可以安全使用」的明确信息。最初由 Chrome 团队提出,现在由 W3C 的 WebDX Community Group 定义。
Baseline 有三个状态:
- Limited availability:还没在所有核心浏览器实现,尚未进入 Baseline。
- Newly available:所有核心浏览器都支持,已经可互操作(interoperable)。
- Widely available:从 Newly available 起算已经过去 30 个月,可以认为绝大多数站点用起来无需担心兼容与 polyfill。
每年会把当年成为 Newly available 的特性归为一个特性集,叫 Baseline target,例如 Baseline 2026、Baseline 2025、Baseline 2024。
Web Platform Dashboard(webstatus.dev)
Web Platform Dashboard 用来查询某个特性是 Baseline Newly 还是 Widely available,由 web-features npm 包提供数据支撑。它基于浏览器厂商与社区维护的公开数据:浏览器兼容性数据(BCD)、web-features、Web Platform Tests(WPT)。
它并不取代 Can I Use 或 MDN 的兼容性表,而是提供一个整体视角:能看到整个 Web 平台以「特性集合」的形式呈现,以及每个特性的实现进度(WPT 得分)。
查询语法(可在 dashboard 搜索框直接用)
baseline_status: limited / newly / widely—— 按 Baseline 状态过滤。limited只返回尚未达到任何 Baseline 状态的特性。baseline_date: YYYY-MM-DD..YYYY-MM-DD—— 按进入 Baseline 的日期区间过滤,起止用..分隔。例如查询2024-01-01..2025-01-01之间进入 Baseline 的特性。group: css—— 按特性分组过滤;只要 CSS 相关特性用group:css。组合可用逻辑运算符,例如-baseline_status:limited AND group:css得到所有 Baseline(newly + widely)的 CSS 特性。id:—— 按 web-features 包里的特性 ID 查询。
HTTP API
Dashboard 前端之下是一套 HTTP API,可直接查询并把 Baseline 数据接进工具链。
返回 JSON 顶层是 data 数组,每个特性字段一致,关键字段:
baseline.status:limited/newly/widely。为limited时只返回该子字段。baseline.low_date:成为 Baseline Newly available 的日期(status 为 newly 或 widely 时提供)。baseline.high_date:成为 Baseline Widely available 的日期(status 为 widely 时提供)。
分页:单次查询最多返回 100 个特性。超过时顶层出现 metadata 字段,含 page_token(下一页 token)和 total(总数)等,用 page_token 继续拉取。
工具链集成
- Browserslist 内置了 Baseline 查询,可在 lint / 打包流程里指定 Baseline 目标。
- ESLint 已支持 CSS 与 Baseline,可以 lint 并强制只使用 Baseline CSS 特性。
- VS Code 现在支持 Baseline。
- 有 Netlify 的 Baseline 扩展。
- 相关链接:
Web Platform Tests(WPT)
web-platform-tests 是 Web 平台栈的跨浏览器测试套件,规范来源包括 WHATWG、W3C 等。编写成 WPT 的测试可以在所有浏览器运行,让浏览器项目确认自己的实现与其他实现兼容。
主要测试类型:
- testharness.js 测试:JS 测试框架,测除渲染以外的行为(DOM、API、事件等)。注意时机与全局状态清理,用
t.add_cleanup(),用 `` 处理慢测试。 - reftests:截屏并比较两个页面。默认在 load 事件后截图;给 `` 加
reftest-wait类,移除该类时才截图。字体相关容易不稳定,尽量用 Ahem 字体。 - wdspec:WebDriver 相关测试。需要自动化输入/用户手势时用 testdriver.js(
test_driver.bless、test_driver.action_sequence)。
文件名约定:.any.js 会在多个全局作用域(window、worker)中运行;.https.sub.html 通过 HTTPS 加载并支持服务端替换({{hosts[][]}}、{{ports[https][0]}});.tentative 表示测试规范中尚未包含的行为。
命令:wpt serve 起 HTTP 服务器,wpt run 在浏览器运行测试,wpt lint 跑 lint,wpt manifest 生成清单,wpt install 装浏览器/webdriver。
wpt.live 是公开部署,可任意浏览器直接跑;wpt.fyi 汇总各浏览器定期跑的测试结果,用来对比互操作性。Chromium 与 WPT 上游是双向 import/export(web_tests/external/wpt);Firefox 用 wpt-sync bot 双向同步,并在 meta/*.ini 里存 Gecko 专属期望结果(expected 键)。
边界与取舍
- Baseline 是「浏览器都实现了」的保证,不代表你自己的用户浏览器分布,LTS / 旧设备 / 企业环境仍可能落后。
- Widely available 的 30 个月是经验阈值,不是硬承诺。
- API 单次最多 100 条,需要
page_token翻页。