호환성
Phasis은 서로 독립적인 세 가지 기준으로 검증됩니다:
- test262 — 공식 TC39 ECMAScript 적합성 테스트 모음입니다. 저장소에 고정된 리비전의 100 % 를 통과합니다.
- Web Platform Tests — ECMAScript가 아닌 웹 API(fetch, XHR, WebSocket, Streams, Headers, Blob, 인코딩, URL, structured-clone, abort, hr-time, atob, crypto)에 대한 공식 WHATWG / W3C 테스트 모음입니다. 가져온 테스트 모음에서 100 % 를 통과합니다.
- 인기 라이브러리 — 널리 사용되는 npm 패키지 204개(acorn, lodash, zod, ramda, immer, redux, date-fns, marked, fuse.js, semver, validator, …)가 Node.js와 바이트 단위로 동일하게 실행됩니다.
다른 엔진과 비교
| 엔진 | test262 | 참고 사항 |
|---|---|---|
| Phasis | 100 % | 순수 PHP. ES2024 이상을 대상으로 합니다. |
| V8 (Node, Chrome) | 99.8 % | 기준 C++ 엔진입니다. |
| SpiderMonkey (Firefox) | 99.6 % | 기준 C++ 엔진입니다. |
| JavaScriptCore (Safari) | 99.4 % | 기준 C++ 엔진입니다. |
| QuickJS | ~97 % | C로 작성된 경량 임베드형 엔진입니다. |
| Hermes (React Native) | ~95 % | 모바일에 최적화된 임베드형 엔진입니다. |
수치는 test262.fyi의 자료입니다. Phasis은 프로덕션 브라우저 엔진과 함께 최상위권에 속합니다.
페이지
- test262 커버리지 — 무엇을 테스트하는지, 테스트 모음이 어떻게 실행되는지, 100%가 중요한 이유를 설명합니다.
- 웹 API(WPT) — Web Platform Pack과 Fetch Pack: URL, 인코딩, atob/btoa, structuredClone, performance, Headers, Blob, AbortSignal, EventTarget, Streams와 crypto, WebSocket, XMLHttpRequest를 다룹니다.
- Streams — WHATWG Streams Standard 전체: ReadableStream, WritableStream, TransformStream, BYOB, tee, pipeTo/pipeThrough, 대기열 전략, 비동기 반복을 다룹니다.
- 인기 패키지 — 파싱, 템플릿, 유효성 검사, 날짜/시간, 수학, 해싱, 검색/차이 비교, 색상, URL 처리 등을 포함한 204개의 npm 패키지가 Node.js와 바이트 단위로 일치하는지 CI에서 검사합니다.
- 명세 범위 — Phasis이 제공하는 모든 ECMAScript 내장 기능, 구문 기능, 표준 라이브러리 객체를 다룹니다.
- 알려진 제한 사항 — Phasis이 V8와 의도적으로 다른 부분: 성능 상한, 멀티 에이전트 동시성, Wasm, 브라우저 전용 웹 API.
측정 방법
- test262 —
bin/test262이 테스트 모음을 로컬에서 실행합니다. 전체 매트릭스는 매 푸시 때가 아니라 수동으로 시작하는compat-matrix.yml워크플로에서 실행됩니다. 성공적으로 실행되면 실행 시점과 기준 커밋을 기록하는 스냅샷이COMPAT.md에 커밋됩니다. 테스트 모음 리비전은test262git 서브모듈에 고정된 버전입니다. - Web Platform Tests —
bin/wpt이 가져온 픽스처를 실행합니다.wpt.yml워크플로는main에 푸시하거나src/, 픽스처 또는 Composer 파일을 변경하는 풀 리퀘스트가 있을 때 실행됩니다. - 인기 라이브러리 —
composer test이tests/Popular/에서 인기 라이브러리 바이트 일치 테스트 모음을 포함한 PHPUnit을 실행합니다.popular.yml워크플로는 같은 경로 필터를 적용해 테스트를 실행하고, 실제 Node에서 모든 기준값도 다시 생성하므로 vendored 라이브러리의 버전을 올릴 때 오래된 기준값을 감지합니다.
WPT 또는 인기 패키지에서 회귀가 발생하면 이를 일으킨 풀 리퀘스트가 실패합니다. test262의 회귀는 다음 매트릭스 실행 때 나타납니다.