
# Teljesítmény

A shikiphp valódi TextMate tokenizálást végez tisztán PHP nyelven, ezért érdemes tisztázni, mikor gyors és mikor nem.

## Mire számíthat

Fájlonként tíz-száz milliszekundummal számoljon, ne mikroszekundumokkal. A tokenizer gyorsítótárazza a lefordított szabályokat és szkennereket, a nyelvtanok lustán töltődnek be (az a minta, amely nem érint beágyazott nyelvet, annak dekódolási költségét sem viseli), és a legtöbb nyelvtani minta natív `preg_*` használatával, ekvivalencia-ellenőrzéssel ellátott PCRE gyors útvonalon fut; a többit a tisztán PHP nyelvű illesztő kezeli (lásd: [Architektúra](https://shikiphp.inline0.dev/hu/docs/architecture#the-scanner-and-its-pcre-fast-path)).

Ezek a tároló benchmarkjából származó, bemelegített, egyszeri hívásra mért idők (`bench/bench.php`, `github-dark` téma), egyetlen gépen, nagyjából 55–105 soros korpuszfájlok esetén:

| Nyelvtan | 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 | körülbelül 290 ms | körülbelül 170 ms |
| TypeScript, TSX | 490–510 ms | 310–370 ms |

Egy folyamatban az adott nyelv első használata egyszeri nyelvtanbetöltési és -fordítási költséggel is jár: ugyanazokban a futásokban JSON esetén ez 50–70 ms, Markdown esetén pedig valamivel több mint egy másodperc volt. A költség a nyelvtan összetettségétől és a bemenet méretétől függ; az értékek gépenként eltérnek, ezért mérje meg a saját környezetében: a tároló klónjában futtassa a `composer install`, majd a `composer bench` parancsot.

## Biztonsági korlátok

A reguláriskifejezés-motor hibamemorizálást és ReDoS-védelmet használ, így a kóros minták lassulást okoznak ahelyett, hogy végtelen várakozásra kényszerítenének. A soronkénti feldolgozást is korlátozhatja a [`tokenizeMaxLineLength`](https://shikiphp.inline0.dev/hu/docs/options#tokenizemaxlinelength) beállítással: az adott hosszúságú vagy annál hosszabb sorokat egyetlen egyszerű tokenné alakítja, védelmet nyújtva a rosszindulatú egysoros bemenetek ellen.

## Gyorsítótárazás éles környezetben

A kiemelést úgy tarthatja távol megbízhatóan a kérések feldolgozási útvonalától, ha **nem** futtatja minden kérésnél. Ugyanannak a kódnak azonos beállításokkal történő kiemelése mindig ugyanazt a HTML eredményezi, ezért kiválóan gyorsítótárazható:

- Kiemelés buildidőben statikus webhelyekhez és dokumentációhoz.
- A megjelenített HTML gyorsítótárazása (a kód és a beállítások alapján) a felhasználó által megadott vagy adatbázisban tárolt kódrészletekhez, majd újrafelhasználása a forrás módosulásáig.

Egy folyamaton belül használja újra ugyanazt a kiemelőt (az `Shikiphp` homlokzat ezt elvégzi Ön helyett), így a nyelvtani és témagyorsítótárak megoszthatók a hívások között.
