Kompatibilitet
Phasis verifieras mot tre oberoende referenser:
- test262 — den officiella TC39-sviten för ECMAScript-överensstämmelse. 100 % av revisionen som är låst i arkivet.
- 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.
- 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/test262kör sviten lokalt. Hela matrisen körs i arbetsflödetcompat-matrix.yml, som startas manuellt i stället för vid varje push. En lyckad körning sparar sin ögonblicksbild iCOMPAT.md, som registrerar när den togs och mot vilken commit. Sviten använder den revision som låsts av delmodulentest262git. - Web Platform Tests —
bin/wptkör de importerade testfixturerna. Arbetsflödetwpt.ymlkör dem vid pushar tillmainoch pullförfrågningar som ändrarsrc/, testfixturerna eller filerna Composer. - Populära bibliotek —
composer testkör PHPUnit, inklusive sviten för byteidentitet hos populära bibliotek undertests/Popular/. Arbetsflödetpopular.ymlkö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.