Compatibiliteit
Phasis is getoetst aan drie onafhankelijke referenties:
- test262 — de officiële TC39 ECMAScript-conformiteitssuite. 100 % van de revisie die in de repository is vastgezet.
- Web Platform Tests — de officiële WHATWG / W3C-suite voor niet-ECMAScript Web-API's (fetch, XHR, WebSocket, Streams, Headers, Blob, codering, URL, structured-clone, abort, hr-time, atob, crypto). 100 % van het geïmporteerde testmateriaal.
- Populaire bibliotheken — 204 veelgebruikte npm-pakketten (acorn, lodash, zod, ramda, immer, redux, date-fns, marked, fuse.js, semver, validator, …) worden byte voor byte identiek aan Node.js uitgevoerd.
Vergeleken met andere engines
| Engine | test262 | Opmerkingen |
|---|---|---|
| Phasis | 100 % | Puur PHP. Gericht op ES2024+. |
| V8 (Node, Chrome) | 99.8 % | Referentie-engine in C++. |
| SpiderMonkey (Firefox) | 99.6 % | Referentie-engine in C++. |
| JavaScriptCore (Safari) | 99.4 % | Referentie-engine in C++. |
| QuickJS | ~97 % | Lichtgewicht, insluitbare engine in C. |
| Hermes (React Native) | ~95 % | Insluitbare engine, geoptimaliseerd voor mobiel. |
Cijfers uit test262.fyi. Phasis behoort tot de topklasse, samen met de productie-engines in browsers.
Pagina's
- test262-dekking — wat wordt getest, hoe de suite wordt uitgevoerd en waarom 100% ertoe doet.
- Web-API's (WPT) — Web Platform Pack en Fetch Pack: URL, codering, atob/btoa, structuredClone, performance, Headers, Blob, AbortSignal, EventTarget, Streams, plus crypto, WebSocket en XMLHttpRequest.
- Streams — de volledige WHATWG Streams Standard: ReadableStream, WritableStream, TransformStream, BYOB, tee, pipeTo/pipeThrough, wachtrijstrategieën en asynchrone iteratie.
- Populaire pakketten — door CI bewaakte bytegelijkheid met Node.js voor 204 npm-pakketten voor parsing, sjablonen, validatie, datum/tijd, wiskunde, hashing, zoeken/verschillen, kleur, URL-verwerking en meer.
- Specificatie-oppervlak — elke ingebouwde functie, syntactische functie en elk standaardbibliotheekobject dat Phasis bevat.
- Bekende beperkingen — waar Phasis bewust afwijkt van V8: prestatieplafond, gelijktijdigheid van meerdere agents, Wasm en Web-API's die alleen in browsers beschikbaar zijn.
Hoe de metingen worden gedaan
- test262 —
bin/test262voert de suite lokaal uit. De volledige matrix draait in de workflowcompat-matrix.yml, die handmatig wordt gestart in plaats van bij elke push; na een geslaagde uitvoering wordt de snapshot vastgelegd inCOMPAT.md, met de datum van de meting en de bijbehorende commit. De suite-revisie is die van de gitsubmoduletest262. - Web Platform Tests —
bin/wptvoert de geïmporteerde fixtures uit. De workflowwpt.ymlvoert ze uit bij pushes naarmainen pull requests met wijzigingen insrc/, de fixtures of de bestanden Composer. - Populaire bibliotheken —
composer testvoert PHPUnit uit, waaronder de bytegelijkheidssuite voor populaire bibliotheken ondertests/Popular/. De workflowpopular.ymlvoert deze uit met hetzelfde padfilter en genereert ook elke referentie opnieuw met echte Node, zodat een verouderde referentie wordt ontdekt wanneer een meegeleverde bibliotheek wordt bijgewerkt.
Een regressie in WPT of een populair pakket laat de pull request vallen die de regressie veroorzaakt. Een regressie in test262 wordt zichtbaar wanneer de matrix de volgende keer wordt uitgevoerd.