Zgodność
Phasis zweryfikowano przy użyciu trzech niezależnych źródeł referencyjnych:
- test262 — oficjalny zestaw testów zgodności ECMAScript TC39. 100 % rewizji przypiętej w repozytorium.
- Web Platform Tests — oficjalny zestaw WHATWG / W3C dla internetowych API innych niż ECMAScript (fetch, XHR, WebSocket, Streams, Headers, Blob, kodowanie, URL, structured-clone, abort, hr-time, atob, crypto). 100 % zaimportowanego zbioru testów.
- Popularne biblioteki — 204 szeroko używanych pakietów npm (acorn, lodash, zod, ramda, immer, redux, date-fns, marked, fuse.js, semver, validator, …) wykonuje się identycznie bajt po bajcie jak Node.js.
W porównaniu z innymi silnikami
| Silnik | test262 | Uwagi |
|---|---|---|
| Phasis | 100 % | Czysty PHP. Obsługuje ES2024 i nowsze. |
| V8 (Node, Chrome) | 99.8 % | Referencyjny silnik C++. |
| SpiderMonkey (Firefox) | 99.6 % | Referencyjny silnik C++. |
| JavaScriptCore (Safari) | 99.4 % | Referencyjny silnik C++. |
| QuickJS | ~97 % | Lekki silnik osadzalny napisany w C. |
| Hermes (React Native) | ~95 % | Silnik osadzalny zoptymalizowany pod kątem urządzeń mobilnych. |
Dane z test262.fyi. Phasis plasuje się w czołówce obok silników używanych w przeglądarkach.
Strony
- test262 — zakres testów — co jest testowane, jak działa zestaw i dlaczego 100% ma znaczenie.
- API internetowe (WPT) — Web Platform Pack i Fetch Pack: URL, kodowanie, atob/btoa, structuredClone, performance, Headers, Blob, AbortSignal, EventTarget, Streams, a także crypto, WebSocket i XMLHttpRequest.
- Strumienie — pełny standard WHATWG Streams: ReadableStream, WritableStream, TransformStream, BYOB, tee, pipeTo/pipeThrough, strategie kolejkowania, iteracja asynchroniczna.
- Popularne pakiety — weryfikowana w CI zgodność bajt po bajcie z Node.js dla 204 pakietów npm obejmujących analizowanie, szablony, walidację, daty i godziny, matematykę, haszowanie, wyszukiwanie i porównywanie, kolory, obsługę URL i nie tylko.
- Zakres specyfikacji — wszystkie wbudowane elementy ECMAScript, funkcje składniowe i obiekty biblioteki standardowej dostarczane przez Phasis.
- Znane ograniczenia — obszary, w których Phasis celowo odbiega od V8: limit wydajności, współbieżność wielu agentów, Wasm, internetowe API dostępne tylko w przeglądarkach.
Jak wykonywane są pomiary
- test262 —
bin/test262uruchamia zestaw lokalnie. Pełna macierz jest uruchamiana ręcznie w procesiecompat-matrix.yml, a nie przy każdym pushu; po udanym przebiegu migawka trafia doCOMPAT.md, gdzie zapisuje się datę jej wykonania i commit, dla którego ją utworzono. Wersja zestawu testów jest przypięta przez podmoduł Gittest262. - Web Platform Tests —
bin/wpturuchamia zaimportowane fixture’y. Proceswpt.ymluruchamia je po pushach domainoraz przy pull requestach zmieniającychsrc/, fixture’y lub pliki Composer. - Popularne biblioteki —
composer testuruchamia PHPUnit, w tym zestaw testów zgodności bajt po bajcie popularnych bibliotek, w ramachtests/Popular/. Procespopular.ymluruchamia go przy tej samej filtracji ścieżek, a także ponownie generuje wszystkie źródła referencyjne w prawdziwym Node, dzięki czemu aktualizacja dołączonej biblioteki ujawni nieaktualne źródło referencyjne.
Regresja w WPT lub popularnym pakiecie powoduje niepowodzenie pull requesta, który ją wprowadza. Regresja test262 zostanie wykryta przy następnym uruchomieniu macierzy.