Liigu sisu juurde

Sissejuhatus

Phasis on puhas-PHP JavaScript-mootor. See lekseerib, parsib ja käivitab ECMAScripti hosti PHP protsessis — ilma exec('node …')-ta, FFI-ta ja kohandatud binaarlaienduseta. See vajab kolme standardset PHP laiendust: ext-mbstring, ext-bcmath ja ext-curl (vaikeedastus fetch() jaoks). ext-intl ja ext-openssl on valikulised. Vaadake Alustamine juhiseid järkude jaoks, milles bcmath puudub.

  • Manustatav — lisage mis tahes PHP rakendusse, raamistikku või CLI-tööriista Phasis\Engine klassi kaudu JS käituskeskkond.
  • Spetsifikatsioonile vastav — läbib ametliku test262 komplekti tasemel 100 %, kõik kategooriad, ühtegi vahelejätmist pole.
  • Veebi API-d — täielik Web Platform Pack (URL, TextEncoder/Decoder, atob/btoa, structuredClone, performance, DOMException), täielik Fetch Pack (fetch, Request, Response, Headers, Body, AbortController/Signal, Blob, File, FormData, EventTarget, täielik WHATWG Streams, navigator), lisaks crypto + SubtleCrypto, WebSocket, XMLHttpRequest ja päris sündmussilmus. Läbib 100 % imporditud Web Platform Tests testidest.
  • Kaasaegne funktsioonistik — noolefunktsioonid, klassid, async/await, Promises, generaatorid, Symbol, BigInt, Proxy, Reflect, Temporal, Intl, TypedArrays, täielik moodulite tugi.
  • PHP↔JS koostalitlus — edastage PHP skalaarid ja massiivid väärtusele JS (massiivid kopeeritakse), siduge PHP sulgurid JS funktsioonidena ja kutsuge JS funktsioone väärtusest PHP. PHP objekte ei saa veel JS-iga jagada; vt Jagatud objektid.

Miks Phasis olemas on

PHP rakendused, mis peavad käivitama kasutaja antud JavaScript-i — mallimootorid, kasutajaliidese SSR-i vahendid, andmete valideerimise reeglid, sisusandboxid, peata testikäivitid — kasutavad tavaliselt Node.js-i välisprotsessina või jätavad funktsiooni lisamata. Mõlemad valikud suurendavad käitamise keerukust: teine käituskeskkond, serialiseerimispiir, alamprotsesside torustik ning jagatud majutuse jaoks keeruline turvarisk.

Phasis täidab selle lünga. Teie PHP kood saab lekseerida, parsida ja käivitada JavaScript-i, kasutades ainult PHP 8.2+ versiooni koos laiendustega mbstring, bcmath ja curl. Mootor tarnitakse Composer-paketina ja sellel on väike API-liides.

Mida see teeb

  • Rakendab täieliku ECMAScripti standardteegi: Array, String, Object, Math, JSON, Date, RegExp, Map, Set, Promise, Proxy, Reflect, Symbol, BigInt, TypedArray, Temporal, Intl, generaatorid, asünkroonsed iteraatorid, moodulid.
  • Sisaldab Web Platformi API-sid, mida pärismaailma JS teegid eelkontrollivad: URL, URLSearchParams, TextEncoder/TextDecoder, atob/btoa, structuredClone, performance, DOMException. Täieliku funktsioonistiku leiate lehelt Veebi API-d.
  • Sisaldab fetch-i koos täieliku Fetchi perekonnaga — Request, Response, Headers, keha tarbijad, AbortController/AbortSignal, Blob, File, FormData, EventTarget/Event ja täielikud WHATWG Streams (ReadableStream, WritableStream, TransformStream, BYOB, järjekorrastrateegiad). Päris HTTP töötab kohe PHP ext-curl abil.
  • Sisaldab crypto-i ja täielikku SubtleCrypto-i (SHA-perekond, HMAC, AES-GCM/CBC/CTR, RSA-OAEP/PSS/PKCS1, ECDSA, ECDH, HKDF, PBKDF2), WebSocket-i (RFC 6455 ja vahetatav edastus) ning XMLHttpRequest-i (kasutab sama fetchi edastust).
  • Sisaldab päris sündmussilmust: setTimeout, setInterval, clearTimeout, clearInterval, queueMicrotask ning Stage-3 AsyncContext väärtuste edastamiseks asünkroonsete piiride kaudu.
  • Toetab nüüdisaegset süntaksit — destruktureerimine, spread/rest, arvutatud omadused, valikuline aheldamine, nullish coalescing, mallisõned, märgendatud mallid, klassid (privaatväljade, staatiliste plokkide ja dekoraatoritega), tipptaseme await.
  • Teisendab väärtusi üle piiri PHP↔JS. Skalaare ja massiive kopeeritakse sisse, PHP kutsutavatest saavad JS funktsioonid ning JS tulemused tagastatakse PHP skalaaride ja massiividena. Täpsed reeglid leiate lehelt Väärtuste teisendamine.
  • Töötab hosti juhtimise all. Hosti hallata jäävad fetch edastus ja poliitikakonksud, sündmussilmus kasutab virtuaalaega ning fikseeritud väljakutsepinu ülempiir peatab lõputu rekursiooni. Tsükli korduste piirang on olemas, kuid seda ei rakendata veel baidikoodi VM-i käivitatavatele tsüklitele; stringipikkuse, väljundi ega seinakella ajalimiiti pole. Vt API: setLimit.
  • Kontrollitakse Node.js abil (V8). CI käivitab ühik- ja oraaklitestid iga main-i üleslaadimise ja tõmbepäringu korral ning Web Platform Tests testid ja populaarsete pakettide komplektid mootori lähtekoodi muutumisel; täielik test262 maatriks käivitatakse käsitsi ja selle hetktõmmis lisatakse COMPAT.md-i. Vt Ühilduvus.

Mis see ei ole

Phasis pole JIT-kompilaator. See on puud läbiv interpretaator koos võimaluse korral kasutatava baidikoodi VM-iga. Arvutuskoormusega tööde puhul arvestage ligikaudu 100× suurema käitusajaga kui V8-l. Vastutasuks puuduvad sõltuvused, kood on puhas PHP ning täitmist juhib host — sobib hästi JavaScript manustamiseks PHP rakendustesse, kus korrektsus ja eraldatus on toorest läbilaskevõimest tähtsamad.

Kust alustada

  • Alustamine — installige ja käivitage oma esimene skript.
  • CLI — bin/phasis failide käivitamiseks, lähtekoodi hindamiseks ja AST väljundisse kirjutamiseks.
  • API — manustage Phasis\Engine oma PHP rakendusse.
  • Koostalitlus — edastage PHP väärtusi ja kutsutavaid väärtusele JavaScript.
  • Ühilduvus — test262 katvus ja toetatud funktsioonid.
  • Parser — parsige JavaScript tüübistatud AST-ks või ESTree-ks seda käivitamata.
  • Vormindaja — vormindage JavaScript, JSON ja CSS prettieriga ühilduva paigutusega.
  • Täpsem teave — arhitektuur, baidikoodi VM, võrdlusalused ja oraaklitestimise mudel.