Liigu sisu juurde

Jõudlus

shikiphp tokeniseerib päriselt TextMate-i koodi puhtas PHP-is, seega tasub ausalt kirjeldada, millal see on kiire ja millal mitte.

Mida oodata

Arvestage faili kohta kümnete kuni sadade millisekunditega, mitte mikrosekunditega. Tokeniseerija salvestab kompileeritud reeglid ja skannerid vahemällu, grammatikad laaditakse vajaduse korral (näide, mis ei kasuta põimitud keelt, ei pea selle dekodeerimise eest maksma) ning enamik grammatikamustreid läbib samaväärsuskontrolliga PCRE kiire teekonna, kasutades natiivset preg_*-i; ülejäänu töötleb puhas PHP-i vasteotsija (vt Arhitektuur).

Need on hoidla võrdlustestist saadud soojad ühe väljakutse ajad (bench/bench.php, teema github-dark), mõõdetuna ühes masinas ligikaudu 55 kuni 105 reaga korpusefailidel:

Grammatika 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 umbes 290 ms umbes 170 ms
TypeScript, TSX 490–510 ms 310–370 ms

Protsessis kasutatava keele esimene päring lisab ühekordse grammatika laadimise ja kompileerimise kulu: samades katsetes oli see JSON puhul 50–70 ms ja Markdown puhul veidi üle sekundi. Kulu sõltub grammatika keerukusest ja sisendi suurusest ning ajad erinevad riistvarati, seega mõõtke enda süsteemis: kloonige hoidla, käivitage composer install ja seejärel composer bench.

Turvakaitsed

Regulaaravaldiste mootor kasutab tõrgete memoiseerimist ja ReDoS-kaitset, nii et patoloogilise mustri korral jõudlus halveneb, kuid protsess ei jää rippuma. Reatöö mahtu saab piirata ka valikuga tokenizeMaxLineLength, mis väljastab määratud pikkuse saavutanud või seda ületava rea ühe tavalise tokenina — kaitse pahatahtlike üherealiste sisendite vastu.

Vahemälu tootmises

Kindlaim viis hoida süntaksi esiletõstmist päringute töötlemisest eemal on seda igal päringul mitte käivitada. Sama kood ja samad valikud annavad alati sama HTML, seega sobib see suurepäraselt vahemällu salvestamiseks:

  • Tõsta esile kood staatiliste saitide ja dokumentatsiooni koostamise ajal.
  • Salvesta renderdatud HTML (võti: kood + valikud) kasutaja antud või andmebaasi salvestatud koodinäidete jaoks vahemällu ning kasuta seda uuesti, kuni lähtekood muutub.

Kasuta protsessi sees üht süntaksi esiletõstjat (Shikiphp fassaad teeb seda sinu eest), et grammatika ja teemade vahemälud oleksid väljakutsete vahel ühiskasutuses.