Gå til indhold

Kompatibilitet

Phasis er verificeret mod tre uafhængige referencekilder:

  1. test262 — TC39's officielle ECMAScript-overensstemmelsestestpakke. 100 % af den revision, der er fastlåst i repositoryet.
  2. Web Platform Tests — den officielle WHATWG / W3C-testpakke for Web-API'er uden for ECMAScript (fetch, XHR, WebSocket, Streams, Headers, Blob, kodning, URL, structured-clone, abort, hr-time, atob, crypto). 100 % af de importerede tests.
  3. Populære biblioteker — 204 udbredte npm-pakker (acorn, lodash, zod, ramda, immer, redux, date-fns, marked, fuse.js, semver, validator, …) køres byteidentisk med Node.js.

Sammenlignet med andre motorer

Motor test262 Bemærkninger
Phasis 100 % Ren PHP. Målretter ES2024+.
V8 (Node, Chrome) 99.8 % Referencemotor i C++.
SpiderMonkey (Firefox) 99.6 % Referencemotor i C++.
JavaScriptCore (Safari) 99.4 % Referencemotor i C++.
QuickJS ~97 % Letvægtsmotor i C, der kan indlejres.
Hermes (React Native) ~95 % Motor, der kan indlejres, optimeret til mobile enheder.

Tallene stammer fra test262.fyi. Phasis ligger i den øverste klasse sammen med produktionsklare browsermotorer.

Sider

  • test262-dækning — hvad der testes, hvordan testpakken køres, og hvorfor 100% er vigtigt.
  • Web-API'er (WPT) — Web Platform Pack og Fetch Pack: URL, kodning, atob/btoa, structuredClone, performance, Headers, Blob, AbortSignal, EventTarget, Streams samt crypto, WebSocket og XMLHttpRequest.
  • Streams — den fulde WHATWG Streams Standard: ReadableStream, WritableStream, TransformStream, BYOB, tee, pipeTo/pipeThrough, køstrategier og asynkron iteration.
  • Populære pakker — CI-kontrolleret byteidentitet med Node.js for 204 npm-pakker inden for parsing, skabeloner, validering, dato/tid, matematik, hashing, søgning/diff, farver, håndtering af URL og mere.
  • Specifikationens overflade — alle ECMAScript-indbyggede funktioner, syntaksfunktioner og standardbiblioteksobjekter, som Phasis leveres med.
  • Kendte begrænsninger — hvor Phasis bevidst afviger fra V8: ydeevnegrænse, samtidighed mellem agenter, Wasm og browserafhængige Web-API'er.

Sådan måles det

  • test262 — bin/test262 kører testpakken lokalt. Hele matrixen køres i workflowet compat-matrix.yml, som startes manuelt og ikke ved hver push; en vellykket kørsel gemmer sit øjebliksbillede i COMPAT.md, hvor det fremgår, hvornår det blev taget og mod hvilken commit. Testpakkens revision er den, der er fastlåst af git-submodulet test262.
  • Web Platform Tests — bin/wpt kører de importerede fixtures. Workflowet wpt.yml kører dem ved push til main og pull requests, der ændrer src/, fixtures eller Composer-filerne.
  • Populære biblioteker — composer test kører PHPUnit, herunder testpakken, der kontrollerer byteidentitet for populære biblioteker, under tests/Popular/. Workflowet popular.yml kører det med samme stifilter og genskaber også alle referenceværdier under rigtig Node, så forældede referenceværdier opdages, når et medfølgende bibliotek opdateres.

En regression i WPT eller en populær pakke får den pull request, der forårsager den, til at fejle. En regression i test262 vises næste gang, matrixen køres.