Zum Inhalt springen

Kompatibilität

Phasis wird mit drei unabhängigen Referenzsystemen überprüft:

  1. test262 — die offizielle ECMAScript-Konformitätssuite des TC39. 100 % der im Repository fixierten Revision.
  2. Web Platform Tests — die offizielle WHATWG-/W3C-Suite für Web-APIs außerhalb von ECMAScript (Fetch, XHR, WebSocket, Streams, Headers, Blob, Encoding, URL, structured-clone, Abort, hr-time, atob, Crypto). 100 % des importierten Korpus.
  3. Beliebte Bibliotheken — 204 weit verbreitete npm-Pakete (acorn, lodash, zod, ramda, immer, redux, date-fns, marked, fuse.js, semver, validator, …) werden bytegleich zu Node.js ausgeführt.

Im Vergleich zu anderen Engines

Engine test262 Hinweise
Phasis 100 % Reines PHP. Unterstützt ES2024+.
V8 (Node, Chrome) 99.8 % C++-Referenz-Engine.
SpiderMonkey (Firefox) 99.6 % C++-Referenz-Engine.
JavaScriptCore (Safari) 99.4 % C++-Referenz-Engine.
QuickJS ~97 % Leichtgewichtige, einbettbare Engine in C.
Hermes (React Native) ~95 % Einbettbare Engine, optimiert für Mobilgeräte.

Zahlen von test262.fyi. Phasis gehört zur Spitzengruppe neben den produktiven Browser-Engines.

Seiten

  • test262-Abdeckung — was getestet wird, wie die Testsuite läuft und warum 100 % wichtig sind.
  • Web-APIs (WPT) — Web Platform Pack und Fetch Pack: URL, Kodierung, atob/btoa, structuredClone, performance, Headers, Blob, AbortSignal, EventTarget, Streams sowie crypto, WebSocket und XMLHttpRequest.
  • Streams — vollständiger WHATWG-Streams-Standard: ReadableStream, WritableStream, TransformStream, BYOB, tee, pipeTo/pipeThrough, Warteschlangenstrategien und asynchrone Iteration.
  • Beliebte Pakete — durch CI geprüfte Byte-Gleichheit mit Node.js für 204 npm-Pakete aus den Bereichen Parsing, Templating, Validierung, Datum/Uhrzeit, Mathematik, Hashing, Suche/Diff, Farbe, URL-Verarbeitung und mehr.
  • Spezifikationsumfang — alle ECMAScript-Built-ins, Syntaxmerkmale und Standardbibliotheksobjekte, die Phasis bereitstellt.
  • Bekannte Einschränkungen — wo Phasis bewusst von V8 abweicht: Leistungsgrenze, nebenläufige Ausführung mehrerer Agents, Wasm und browsergebundene Web-APIs.

So wird gemessen

  • test262 — bin/test262 führt die Suite lokal aus. Die vollständige Matrix läuft im Workflow compat-matrix.yml, der manuell statt bei jedem Push gestartet wird. Bei erfolgreichem Lauf wird der Snapshot unter COMPAT.md gespeichert; darin sind Zeitpunkt und Commit des Laufs festgehalten. Die Suite-Revision entspricht der des fixierten git-Submoduls test262.
  • Web Platform Tests — bin/wpt führt die importierten Fixtures aus. Der Workflow wpt.yml führt sie bei Pushes auf main und bei Pull Requests aus, die src/, die Fixtures oder die Composer-Dateien ändern.
  • Beliebte Bibliotheken — composer test führt PHPUnit einschließlich der Byte-Gleichheitssuite für beliebte Bibliotheken unter tests/Popular/ aus. Der Workflow popular.yml führt sie bei denselben Pfadfiltern aus und erstellt außerdem alle Referenzwerte erneut mit echtem Node. So werden veraltete Referenzwerte erkannt, wenn eine vendorte Bibliothek aktualisiert wird.

Eine Regression bei WPT oder einem beliebten Paket lässt den Pull Request, der sie verursacht, fehlschlagen. Eine test262-Regression wird beim nächsten Lauf der Matrix sichtbar.