Ugrás a tartalomhoz

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).

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 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.