Ga naar de inhoud

Compatibiliteit

Phasis is getoetst aan drie onafhankelijke referenties:

  1. test262 — de officiële TC39 ECMAScript-conformiteitssuite. 100 % van de revisie die in de repository is vastgezet.
  2. 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.
  3. 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/test262 voert de suite lokaal uit. De volledige matrix draait in de workflow compat-matrix.yml, die handmatig wordt gestart in plaats van bij elke push; na een geslaagde uitvoering wordt de snapshot vastgelegd in COMPAT.md, met de datum van de meting en de bijbehorende commit. De suite-revisie is die van de gitsubmodule test262.
  • Web Platform Tests — bin/wpt voert de geïmporteerde fixtures uit. De workflow wpt.yml voert ze uit bij pushes naar main en pull requests met wijzigingen in src/, de fixtures of de bestanden Composer.
  • Populaire bibliotheken — composer test voert PHPUnit uit, waaronder de bytegelijkheidssuite voor populaire bibliotheken onder tests/Popular/. De workflow popular.yml voert 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.