
# 兼容性

Phasis 通过三个独立的验证基准进行验证：

1. **test262** — TC39 官方 ECMAScript 一致性测试套件。通过仓库固定的版本中 **100 %** 的测试。
2. **Web Platform Tests** — WHATWG / W3C 官方非 ECMAScript Web API 测试套件（fetch、XHR、WebSocket、Streams、Headers、Blob、编码、URL、structured-clone、abort、hr-time、atob、crypto）。导入的测试集通过率为 **100 %**。
3. **热门库** — 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](https://test262.fyi)。Phasis 与生产环境中的浏览器引擎同属第一梯队。

## 页面

- **[test262 覆盖范围](https://phasis.inline0.dev/zh/docs/compatibility/test262)** — 测试内容、套件运行方式以及 100% 的意义。
- **[Web API（WPT）](https://phasis.inline0.dev/zh/docs/compatibility/web-apis)** — Web Platform Pack 和 Fetch Pack：URL、编码、atob/btoa、structuredClone、performance、Headers、Blob、AbortSignal、EventTarget、Streams，以及 crypto、WebSocket 和 XMLHttpRequest。
- **[Streams](https://phasis.inline0.dev/zh/docs/compatibility/streams)** — 完整的 WHATWG Streams Standard：ReadableStream、WritableStream、TransformStream、BYOB、tee、pipeTo/pipeThrough、排队策略、异步迭代。
- **[热门包](https://phasis.inline0.dev/zh/docs/compatibility/popular-packages)** — 由 CI 把关，与 Node.js 进行字节级一致性比对，涵盖解析、模板、验证、日期/时间、数学、哈希、搜索/差异比较、颜色、URL 处理等领域的 204 个 npm 包。
- **[规范覆盖面](https://phasis.inline0.dev/zh/docs/compatibility/spec-surface)** — Phasis 提供的每个 ECMAScript 内置项、语法功能和标准库对象。
- **[已知限制](https://phasis.inline0.dev/zh/docs/compatibility/limitations)** — Phasis 有意偏离 V8 的方面：性能上限、多代理并发、Wasm、仅限浏览器的 Web API。

## 测量方式

- **test262** — `bin/test262` 在本地运行套件。完整矩阵在 `compat-matrix.yml` 工作流中运行，该工作流由人工启动，而不是每次推送时运行；成功运行后会将快照提交到 [`COMPAT.md`](https://github.com/inline0/phasis/blob/main/COMPAT.md)，其中记录了快照的生成时间和对应的提交。套件版本为 `test262` git 子模块固定的版本。
- **Web Platform Tests** — `bin/wpt` 会运行导入的测试样例。`wpt.yml` 工作流会在推送到 `main`，以及更改 `src/`、测试样例或 Composer 文件的拉取请求中运行这些测试。
- **热门库** — `composer test` 会运行 PHPUnit，包括 `tests/Popular/` 下的热门库字节级一致性套件。`popular.yml` 工作流会应用相同的路径筛选条件运行该套件，并在真实 Node 环境下重新生成所有验证基准，因此升级供应的库时可以发现过时的验证基准。

WPT 或热门包回归会导致引入该问题的拉取请求失败。test262 回归则会在下次运行矩阵时显现。
