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