Перейти к содержимому

Совместимость

Phasis проверяется по трем независимым эталонам:

  1. test262 — официальный набор тестов соответствия ECMAScript от TC39. В репозитории закреплена версия; пройдено 100 %.
  2. Web Platform Tests — официальный набор WHATWG / W3C для веб-API вне ECMAScript (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. 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 с датой создания и хешем проверяемого коммита. Используется версия набора тестов, закрепленная в подмодуле test262 git.
  • Web Platform Tests — bin/wpt запускает импортированные тестовые примеры. Рабочий процесс wpt.yml запускает их при отправке изменений в main и при создании запросов на слияние с изменениями в src/, тестовых примерах или файлах Composer.
  • Популярные библиотеки — composer test запускает PHPUnit, в том числе набор тестов побайтового совпадения популярных библиотек в tests/Popular/. Рабочий процесс popular.yml запускается по тому же фильтру путей и заново создает все эталонные результаты с помощью настоящего Node, чтобы обнаруживать устаревшие эталонные результаты при обновлении сторонней библиотеки.

Регрессия в WPT или популярном пакете приведет к сбою запроса на слияние, который ее внес. О регрессии test262 станет известно при следующем запуске матрицы.