Совместимость
Phasis проверяется по трем независимым эталонам:
- test262 — официальный набор тестов соответствия ECMAScript от TC39. В репозитории закреплена версия; пройдено 100 %.
- Web Platform Tests — официальный набор WHATWG / W3C для веб-API вне ECMAScript (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%.
- Веб-API (WPT) — Web Platform Pack и Fetch Pack: URL, кодирование, atob/btoa, structuredClone, performance, Headers, Blob, AbortSignal, EventTarget, Streams, а также crypto, WebSocket и XMLHttpRequest.
- Потоки — полный стандарт WHATWG Streams: ReadableStream, WritableStream, TransformStream, BYOB, tee, pipeTo/pipeThrough, стратегии постановки в очередь, асинхронная итерация.
- Популярные пакеты — побайтовое совпадение с Node.js, контролируемое в CI, для 204 npm пакетов в областях разбора, шаблонов, проверки данных, даты и времени, математики, хеширования, поиска и сравнения, цвета, работы с URL и не только.
- Возможности спецификации — все встроенные средства ECMAScript, синтаксические возможности и объекты стандартной библиотеки, поставляемые с Phasis.
- Известные ограничения — в чем Phasis намеренно отличается от V8: предел производительности, параллелизм нескольких агентов, Wasm, веб-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 станет известно при следующем запуске матрицы.