Kompatibilitet
Phasis er verificeret mod tre uafhængige referencekilder:
- test262 — TC39's officielle ECMAScript-overensstemmelsestestpakke. 100 % af den revision, der er fastlåst i repositoryet.
- 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.
- 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/test262kører testpakken lokalt. Hele matrixen køres i workflowetcompat-matrix.yml, som startes manuelt og ikke ved hver push; en vellykket kørsel gemmer sit øjebliksbillede iCOMPAT.md, hvor det fremgår, hvornår det blev taget og mod hvilken commit. Testpakkens revision er den, der er fastlåst af git-submodulettest262. - Web Platform Tests —
bin/wptkører de importerede fixtures. Workflowetwpt.ymlkører dem ved push tilmainog pull requests, der ændrersrc/, fixtures eller Composer-filerne. - Populære biblioteker —
composer testkører PHPUnit, herunder testpakken, der kontrollerer byteidentitet for populære biblioteker, undertests/Popular/. Workflowetpopular.ymlkø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.