Перейти до вмісту

Сумісність

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, стратегії постановки в чергу, асинхронний перебір.
  • Популярні пакети — контрольований CI побайтовий збіг із Node.js для 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 виявляється під час наступного запуску матриці.