Hoppa till innehåll

Kompatibilitet

Phasis verifieras mot tre oberoende referenser:

  1. test262 — den officiella TC39-sviten för ECMAScript-överensstämmelse. 100 % av revisionen som är låst i arkivet.
  2. Web Platform Tests — den officiella WHATWG-/W3C-sviten för Web-API:er som inte ingår i ECMAScript (fetch, XHR, WebSocket, Streams, Headers, Blob, kodning, URL, structured-clone, abort, hr-time, atob, crypto). 100 % av den importerade korpusen.
  3. Populära bibliotek — 204 vanliga npm-paket (acorn, lodash, zod, ramda, immer, redux, date-fns, marked, fuse.js, semver, validator, …) körs byteidentiskt med Node.js.

Jämförelse med andra motorer

Motor test262 Anteckningar
Phasis 100 % Ren PHP. Stöder ES2024+.
V8 (Node, Chrome) 99.8 % Referensmotor i C++.
SpiderMonkey (Firefox) 99.6 % Referensmotor i C++.
JavaScriptCore (Safari) 99.4 % Referensmotor i C++.
QuickJS ~97 % Kompakt inbäddningsbar motor i C.
Hermes (React Native) ~95 % Inbäddningsbar motor optimerad för mobiler.

Uppgifterna kommer från test262.fyi. Phasis ligger i toppskiktet tillsammans med produktionsmotorerna i webbläsare.

Sidor

  • test262-täckning — vad som testas, hur sviten körs och varför 100 % spelar roll.
  • Webb-API:er (WPT) — Web Platform Pack och Fetch Pack: URL, kodning, atob/btoa, structuredClone, performance, Headers, Blob, AbortSignal, EventTarget, Streams samt crypto, WebSocket och XMLHttpRequest.
  • Streams — hela WHATWG Streams Standard: ReadableStream, WritableStream, TransformStream, BYOB, tee, pipeTo/pipeThrough, köstrategier och asynkron iteration.
  • Populära paket — CI-kontrollerad byteidentitet med Node.js för 204 npm-paket inom parsning, mallar, validering, datum/tid, matematik, hashing, sökning/diff, färg, hantering av URL med mera.
  • Specifikationsyta — alla inbyggda ECMAScript-funktioner, syntaxfunktioner och standardbiblioteksobjekt som Phasis innehåller.
  • Kända begränsningar — områden där Phasis avviker avsiktligt från V8: prestandatak, samtidighet mellan flera agenter, Wasm och Web-API:er som bara finns i webbläsare.

Så mäts resultaten

  • test262 — bin/test262 kör sviten lokalt. Hela matrisen körs i arbetsflödet compat-matrix.yml, som startas manuellt i stället för vid varje push. En lyckad körning sparar sin ögonblicksbild i COMPAT.md, som registrerar när den togs och mot vilken commit. Sviten använder den revision som låsts av delmodulen test262 git.
  • Web Platform Tests — bin/wpt kör de importerade testfixturerna. Arbetsflödet wpt.yml kör dem vid pushar till main och pullförfrågningar som ändrar src/, testfixturerna eller filerna Composer.
  • Populära bibliotek — composer test kör PHPUnit, inklusive sviten för byteidentitet hos populära bibliotek under tests/Popular/. Arbetsflödet popular.yml kör den med samma sökvägsfilter och återskapar också varje referensresultat med riktig Node, så inaktuella referensresultat upptäcks när ett inbäddat bibliotek uppgraderas.

En regression i WPT eller ett populärt paket gör att pullförfrågan som orsakar den misslyckas. En regression i test262 upptäcks nästa gång matrisen körs.