Siirry sisältöön

Suorituskyky

shikiphp tokenisoi koodin aidosti TextMate-kielellä puhtaassa PHPssä, joten on hyvä kertoa rehellisesti, missä se on nopea ja missä ei.

Mitä odottaa

Varaa tiedostoa kohti kymmeniä tai satoja millisekunteja, älä mikrosekunteja. Tokenisoija tallentaa käännetyt säännöt ja skannerit välimuistiin, kieliopit ladataan tarpeen mukaan (näyte, jossa ei käytetä upotettua kieltä, ei maksa sen purkamisesta), ja useimmat kielioppikuviot käsitellään natiivilla preg_*llä vastaavuuden varmistavalla PCRE-pikapolulla, kun taas puhdas PHP-täsmääjä hoitaa loput (katso Arkkitehtuuri).

Nämä ovat lämpimän välimuistin yhden kutsun aikoja projektin vertailuajosta (bench/bench.php, teema github-dark) yhdellä koneella, tiedostokorpukselle, jonka rivien määrä on noin 55–105:

Kielioppi PHP 8.2 PHP 8.4
JSON, YAML 30–65 ms 25–45 ms
CSS, HTML 100–120 ms 80–100 ms
Python, Rust, Go, Bash, Markdown 190–220 ms 125–175 ms
PHP noin 290 ms noin 170 ms
TypeScript, TSX 490–510 ms 310–370 ms

Prosessin ensimmäinen kyseisen kielen kutsu sisältää myös kertaluonteisen kieliopin latauksen ja käännöksen: samoissa ajoissa kesto vaihteli JSONn 50–70 ms:sta hieman yli sekuntiin Markdownn kohdalla. Kustannus kasvaa kieliopin monimutkaisuuden ja syötteen koon mukaan, ja luvut vaihtelevat laitteiston mukaan, joten mittaa itse: projektin kloonissa aja ensin composer install ja sitten composer bench.

Turvasuojaukset

Säännöllisten lausekkeiden moottori sisältää virheiden muistiin tallennuksen ja ReDoS-suojauksen, joten poikkeuksellisen kuvion suoritus hidastuu sen sijaan, että se jumiutuisi. Voit myös rajata rivikohtaista työtä asetuksella tokenizeMaxLineLength, joka tuottaa yhden tavallisen tokenin vähintään tietyn pituisille riveille — suojaus haitallisia yksirivisiä syötteitä vastaan.

Välimuisti tuotannossa

Luotettava tapa pitää korostus poissa pyyntöpolulta on olla suorittamatta sitä jokaisella pyynnöllä. Saman koodin korostus samoilla asetuksilla tuottaa aina saman HTMLn, joten sen voi tallentaa täydellisesti välimuistiin:

  • Korosta koodi rakennusvaiheessa staattisilla sivustoilla ja dokumentaatiossa.
  • Tallenna renderöity HTML välimuistiin (avaimena koodi + asetukset) käyttäjän antamia tai tietokantaan tallennettuja katkelmia varten ja käytä sitä uudelleen lähteen muuttumiseen asti.

Käytä prosessin sisällä samaa korostinta uudelleen (Shikiphp-rajapinta tekee tämän puolestasi), jotta kielioppi- ja teemavälimuistit jakautuvat kutsujen kesken.