Przejdź do treści

Zgodność

Phasis zweryfikowano przy użyciu trzech niezależnych źródeł referencyjnych:

  1. test262 — oficjalny zestaw testów zgodności ECMAScript TC39. 100 % rewizji przypiętej w repozytorium.
  2. 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.
  3. 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/test262 uruchamia zestaw lokalnie. Pełna macierz jest uruchamiana ręcznie w procesie compat-matrix.yml, a nie przy każdym pushu; po udanym przebiegu migawka trafia do COMPAT.md, gdzie zapisuje się datę jej wykonania i commit, dla którego ją utworzono. Wersja zestawu testów jest przypięta przez podmoduł Git test262.
  • Web Platform Tests — bin/wpt uruchamia zaimportowane fixture’y. Proces wpt.yml uruchamia je po pushach do main oraz przy pull requestach zmieniających src/, fixture’y lub pliki Composer.
  • Popularne biblioteki — composer test uruchamia PHPUnit, w tym zestaw testów zgodności bajt po bajcie popularnych bibliotek, w ramach tests/Popular/. Proces popular.yml uruchamia 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.