Lühidalt: PHP JIT (Just-in-time-kompilaator) tõlgib sageli täidetava PHP koodi töö ajal masinkoodiks. See tuli PHP 8.0-ga, kuulub OPcache'i juurde ja on alates PHP 8.4-st vaikimisi välja lülitatud. Arvutusmahukad ülesanded muutuvad sellega märgatavalt kiiremaks, tüüpilised veebisaidid nagu WordPress vaevu. Suurema kasu toovad OPcache, ajakohane PHP versioon ja sobivalt seatud protsessihaldus ning iga ajakohane versioon toob korraga kaasa vajalikud turvaparandused.
Mis on JIT-kompilaator PHP-s?
PHP on interpreteeritud keel: lähtekood tõlgitakse kõigepealt baitkoodiks, nn opcode'ideks, ja neid täidab Zend Engine. JIT astub sammu kaugemale. See jälgib, millised koodilõigud töötavad sageli, ja tõlgib just need protsessori masinkoodiks. Sestpeale töötavad need ilma interpretaatori ringitee vajaduseta.
Kasutuselevõtu RFC kirjeldab JIT-i OPcache'i peaaegu iseseisva osana. Loodud masinkood asub OPcache'i jagatud mälu lisapiirkonnas. PHP 8.4-ga ehitas projekt JIT-i uuesti üles; väljalaskelehe järgi põhineb uus realisatsioon IR-raamistikul, koodi genereerimise ühisel vaheesitusel. Kuidas mootor selle all töötab, selgitab Zend Engine.
Esmalt OPcache: tegelik jõudluse alus
Ilma OPcache'ita tõlgib PHP iga faili igal päringul uuesti. OPcache hoiab baitkoodi jagatud mälus, nii et kõik workerid saavad seda taaskasutada. Sisuhaldussüsteemiga veebisaidi jaoks on see ülekaalukalt kõige olulisem hoob. Alates PHP 8.5-st on OPcache vastu võetud RFC järgi PHP-sse kindlalt sisse kompileeritud; tuntud ini-sätted juhivad edasi seda, kas vahemälu on aktiivne.
Olulised vaikeväärtused käsiraamatu järgi: opcache.enable=1, opcache.enable_cli=0, opcache.validate_timestamps=1 ja opcache.revalidate_freq=2. Viimase sättega kontrollib OPcache kõige rohkem iga kahe sekundi tagant, kas failid on muutunud. Kes lülitab validate_timestamps välja, peab pärast iga väljaveeretamist vahemälu tühjendama või PHP uuesti käivitama. Lisaks lehel OPcache selgitus.
PHP JIT-i seadistamine: režiimid ja sätted
JIT-i juhitakse kahe direktiiviga:
| Direktiiv | Vaikeväärtus alates 8.4 | Vaikeväärtus enne 8.4 | Tähendus |
|---|---|---|---|
opcache.jit |
disable |
tracing |
JIT-i režiim |
opcache.jit_buffer_size |
64M |
0 |
loodud masinkoodi mälu, 0 lülitab JIT-i välja |
Sätte opcache.jit jaoks tunneb käsiraamat järgmisi väärtusi: disable (täiesti väljas, täitmisajal sisselülitamatu), off (väljas, kuid täitmisajal sisselülitatav), tracing ehk on (enamikule kasutajatele soovitatav) ja function. Lisaks on olemas neljakohaline numbriline kirjaviis peenhäälestuseks.
; JIT sihipäraselt sisse lülitada, nt arvutusmahukate workerite jaoks
opcache.enable=1
opcache.jit=tracing
opcache.jit_buffer_size=64M
Kas JIT töötab, näitab OPcache'i olek:
php -i | grep -i "opcache.jit" # CLI sätted
php --ri "Zend OPcache" # OPcache laienduse seadistus
Pidage meeles, et käsurida võib kasutada teisi sätteid kui PHP-FPM. Veebitöös loeb phpinfo() väljund FPM-i kontekstis, ideaalis kutsutuna välja ainult sisemiselt ja pärast uuesti eemaldatuna.
Mida JIT praktikas annab?
RFC autorid mõõtsid: sünteetiline skript bench.php töötas JIT-iga enam kui kaks korda kiiremini. Reaalsete rakenduste puhul jäi kasu väikeseks; WordPress jõudis 326 päringuni sekundis 315 asemel, PHP parser töötas umbes 1,3 korda kiiremini. RFC ütleb avalikult, et JIT ei kiirenda reaalseid rakendusi nagu WordPress märgatavalt.
Põhjus on tüüpiliste veebirakenduste profiilis. Nad ootavad suure osa ajast andmebaasi, failisüsteemi või väliseid teenuseid. Kiirem protsessoriteekond aitab seal vähe. Kasu võivad saada seevastu pilditöötlus PHP-s, matemaatilised arvutused, parserid või kaua töötavad workerid.
Jõudlus ilma JIT-ita: mõjusamad hoovad
Ettevõtete veebisaitide ja poodide jaoks tasub see järjekord:
- Ajakohane PHP versioon: uued versioonid toovad optimeerimisi ja ennekõike turvaparandusi.
- OPcache õigesti mõõtmestada: piisavalt mälu ja ruumi rakenduse kõigi failide jaoks.
- PHP-FPM sobivalt seadistada:
pm.max_childrenkohandada saadaoleva põhimälu järgi, mitte pimesi suurendada. - Andmebaasi kontrollida: aeglased päringud üles leida, indeksid seada.
- Rakenduse tasemel vahemälu: lehe- või objektivahemälu, kus süsteem seda toetab.
- Mõõta, mitte arvata:
request_slowlog_timeoutPHP-FPM-is kirjutab aeglaste päringute jaoks backtrace'i slowlogi.
JIT, jõudlus ja turvalisus
Jõudlus ja turvalisus on tihedamalt seotud, kui paistab. Esiteks: iga lisakomponent on lisakood. Kasutuselevõtu RFC nimetab ise vigade riski JIT-is, koodi genereerimises ja registrite jaotamises, samuti keerulisemat veaotsingut. Kes JIT-i mõõdetavalt ei vaja, jätab selle vaikeväärtusele disable.
Teiseks: OPcache ja workerid hoiavad koodi mälus. Pärast turvauuendust nagu PHP2Shelli puhul töötavad vanad protsessid vana koodiga edasi, kuni need on uuesti käivitatud. Vahemälu tühjendamine üksi seda taaskäivitust ei asenda, sest turvaaugud CVE-2026-109618 ja CVE-2026-109619 asuvad PHP binaaris endas.
Kolmandaks: parim jõudluse kasu, ajakohane versioon, on samal ajal olulisim kaitsemeede. PHP 8.2 toetus lõpeb 31.12.2026; kes vahetab nüüd versioonile 8.4 või 8.5, võidab mõlemat. Kuidas hoiame süsteemid püsivalt kiired ja karastatud, kirjeldab PHP veebiserverite karastamine.
Kuidas PHP SOS konkreetselt aitab?
- Olemasoleva analüüs: Loeme välja OPcache'i, JIT-i ja FPM-i sätted ning võrdleme neid koormuse ja põhimäluga.
- Kitsaskohtade mõõtmine: Slowlogi ja serveri näitajatega leiame, kuhu aeg tegelikult kaob.
- Turvaline seadistus: JIT ainult seal, kus see tõendatult aitab; OPcache nii, et väljaveeretamised ja uuendused mõjuvad puhtalt.
- Uuenduste planeerimine: Versioonivahetus testiga ja dokumenteeritud taaskäivitusega, et kiirus ja paigaseis oleksid korras.
Korduma kippuvad küsimused
Kas JIT on PHP-s vaikimisi aktiivne?
Alates PHP 8.4-st enam mitte: opcache.jit vaikeväärtus on disable. Varem oli eelseadistatud tracing, kuid puhver opcache.jit_buffer_size oli seatud 0-le, mistõttu JIT samuti ei töötanud.
Kas JIT teeb WordPressi kiiremaks?
Vaevu. Juba kasutuselevõtu RFC-s kirjutavad autorid, et JIT ei kiirenda reaalseid rakendusi nagu WordPress märgatavalt. Nende mõõteväärtus tõusis 315-lt 326 päringule sekundis.
Kas ma vajan OPcache'i, kui JIT-i ei kasuta?
Jah. OPcache salvestab tõlgitud baitkoodi jagatud mällu ja säästab igal päringul uuesti kompileerimist. See on peaaegu iga PHP veebisaidi jaoks kõige olulisem jõudluse hoob. Alates PHP 8.5-st on OPcache PHP-sse kindlalt sisse ehitatud.
Kas JIT on turvarisk?
Rohkem koodi tähendab rohkem võimalikke vigu. Kasutuselevõtu RFC nimetab ise JIT-i vigade riski ja keerulisemat veaotsingut. Kes seda ei vaja, jätab selle välja; kes kasutab, peaks uuendused eriti kiiresti paigaldama.