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.