兼容性
Phasis 通过三个独立的验证基准进行验证:
- test262 — TC39 官方 ECMAScript 一致性测试套件。通过仓库固定的版本中 100 % 的测试。
- Web Platform Tests — WHATWG / W3C 官方非 ECMAScript Web API 测试套件(fetch、XHR、WebSocket、Streams、Headers、Blob、编码、URL、structured-clone、abort、hr-time、atob、crypto)。导入的测试集通过率为 100 %。
- 热门库 — 204 个广泛使用的 npm 包(acorn、lodash、zod、ramda、immer、redux、date-fns、marked、fuse.js、semver、validator、…)运行结果与 Node.js 字节级一致。
与其他引擎比较
| 引擎 | test262 | 备注 |
|---|---|---|
| Phasis | 100 % | 纯 PHP。支持 ES2024+。 |
| V8(Node、Chrome) | 99.8 % | 参考 C++ 引擎。 |
| SpiderMonkey(Firefox) | 99.6 % | 参考 C++ 引擎。 |
| JavaScriptCore(Safari) | 99.4 % | 参考 C++ 引擎。 |
| QuickJS | ~97 % | 轻量级、可嵌入的 C 语言引擎。 |
| Hermes(React Native) | ~95 % | 为移动设备优化的可嵌入引擎。 |
数据来自test262.fyi。Phasis 与生产环境中的浏览器引擎同属第一梯队。
页面
- test262 覆盖范围 — 测试内容、套件运行方式以及 100% 的意义。
- Web API(WPT) — Web Platform Pack 和 Fetch Pack:URL、编码、atob/btoa、structuredClone、performance、Headers、Blob、AbortSignal、EventTarget、Streams,以及 crypto、WebSocket 和 XMLHttpRequest。
- Streams — 完整的 WHATWG Streams Standard:ReadableStream、WritableStream、TransformStream、BYOB、tee、pipeTo/pipeThrough、排队策略、异步迭代。
- 热门包 — 由 CI 把关,与 Node.js 进行字节级一致性比对,涵盖解析、模板、验证、日期/时间、数学、哈希、搜索/差异比较、颜色、URL 处理等领域的 204 个 npm 包。
- 规范覆盖面 — Phasis 提供的每个 ECMAScript 内置项、语法功能和标准库对象。
- 已知限制 — Phasis 有意偏离 V8 的方面:性能上限、多代理并发、Wasm、仅限浏览器的 Web API。
测量方式
- test262 —
bin/test262在本地运行套件。完整矩阵在compat-matrix.yml工作流中运行,该工作流由人工启动,而不是每次推送时运行;成功运行后会将快照提交到COMPAT.md,其中记录了快照的生成时间和对应的提交。套件版本为test262git 子模块固定的版本。 - Web Platform Tests —
bin/wpt会运行导入的测试样例。wpt.yml工作流会在推送到main,以及更改src/、测试样例或 Composer 文件的拉取请求中运行这些测试。 - 热门库 —
composer test会运行 PHPUnit,包括tests/Popular/下的热门库字节级一致性套件。popular.yml工作流会应用相同的路径筛选条件运行该套件,并在真实 Node 环境下重新生成所有验证基准,因此升级供应的库时可以发现过时的验证基准。
WPT 或热门包回归会导致引入该问题的拉取请求失败。test262 回归则会在下次运行矩阵时显现。