# JIT a výkon v PHP 8

> PHP JIT a výkon v PHP 8: ako kompilátor JIT spolupracuje s OPcache, aké nastavenia platia a prečo aktualizácie rozhodujú o rýchlosti aj bezpečnosti.

Zdroj: https://phpsos.de/sk/php/jit-und-performance/  
Stav: 25.10.2026  
Poskytovateľ: PHP SOS, Núdzová pomoc pri PHP a bezpečnosť serverov. Okamžitá pomoc cez WhatsApp: https://wa.me/491736494914?text=Dobr%C3%BD%20de%C5%88%2C%20PHP%20SOS%2C%20potrebujeme%20pomoc%20s%20na%C5%A1%C3%ADm%20serverom%20s%20PHP.%20Spolo%C4%8Dnos%C5%A5%3A%20%E2%80%A6%20Web%3A%20%E2%80%A6

**Stručne:** PHP JIT (just-in-time kompilátor) prekladá často vykonávaný kód PHP za behu do strojového kódu. Prišiel s PHP 8.0, je súčasťou OPcache a od PHP 8.4 je štandardne vypnutý. Výpočtovo náročné úlohy sa tak výrazne zrýchlia, typické weby ako WordPress sotva. Väčší zisk prinášajú OPcache, aktuálna verzia PHP a vhodne nastavená správa procesov, a každá aktuálna verzia prináša zároveň potrebné bezpečnostné opravy.

## Čo je kompilátor JIT v PHP?

PHP je interpretovaný jazyk: zdrojový text sa najprv preloží do bytecode, takzvaných opcódov, a tie vykonáva Zend Engine. JIT ide o krok ďalej. Sleduje, ktoré časti kódu bežia často, a práve tie preloží do strojového kódu pre procesor. Odvtedy bežia bez obchádzky cez interpreter.

RFC k zavedeniu opisuje JIT ako takmer samostatnú súčasť OPcache. Vygenerovaný strojový kód leží v dodatočnej oblasti zdieľanej pamäte OPcache. S PHP 8.4 projekt JIT prebudoval; podľa stránky vydania je nová implementácia založená na frameworku IR, spoločnej medzireprezentácii pre generovanie kódu. Ako funguje engine pod tým, vysvetľuje [Zend Engine](https://phpsos.de/sk/php/zend-engine/).

## Najprv OPcache: skutočný základ výkonu

Bez OPcache PHP preloží každý súbor pri každej požiadavke odznova. OPcache uchováva bytecode v zdieľanej pamäti, takže ho všetci workeri znovu používajú. Pre web so systémom správy obsahu je to zďaleka najdôležitejšia páka. Od PHP 8.5 je OPcache podľa prijatého RFC pevne skompilovaná v PHP; známe nastavenia ini naďalej riadia, či je cache aktívna.

Dôležité štandardné hodnoty podľa príručky: `opcache.enable=1`, `opcache.enable_cli=0`, `opcache.validate_timestamps=1` a `opcache.revalidate_freq=2`. Pri poslednom nastavení OPcache kontroluje najviac každé dve sekundy, či sa súbory zmenili. Kto `validate_timestamps` vypne, musí po každom nasadení vyprázdniť cache alebo reštartovať PHP. Viac v [OPcache vysvetlená](https://phpsos.de/sk/php/opcache/).

## Konfigurácia PHP JIT: režimy a nastavenia

JIT sa riadi dvoma direktívami:

| Direktíva | Štandard od 8.4 | Štandard pred 8.4 | Význam |
|---|---|---|---|
| `opcache.jit` | `disable` | `tracing` | Režim JIT |
| `opcache.jit_buffer_size` | `64M` | `0` | Pamäť pre vygenerovaný strojový kód, `0` vypína JIT |

Pre `opcache.jit` pozná príručka tieto hodnoty: `disable` (úplne vypnuté, za behu sa nedá zapnúť), `off` (vypnuté, ale za behu zapnuteľné), `tracing`, resp. `on` (odporúčané pre väčšinu používateľov) a `function`. Okrem toho existuje štvorciferný číselný zápis na jemné nastavenia.

```ini
; JIT zapnúť cielene, napr. pre výpočtovo náročné workery
opcache.enable=1
opcache.jit=tracing
opcache.jit_buffer_size=64M
```

To, či JIT beží, ukazuje stav OPcache:

```bash
php -i | grep -i "opcache.jit"          # nastavenia CLI
php --ri "Zend OPcache"                 # konfigurácia rozšírenia OPcache
```

Majte na pamäti, že príkazový riadok môže používať iné nastavenia než PHP-FPM. Pre webovú prevádzku je rozhodujúci výstup `phpinfo()` v kontexte FPM, ideálne vyvolaný iba interne a potom opäť odstránený.

## Čo JIT prináša v praxi?

Autori RFC merali: syntetický skript bench.php bežal s JIT viac než dvakrát rýchlejšie. Pri reálnych aplikáciách bol zisk malý; WordPress dosiahol 326 namiesto 315 požiadaviek za sekundu, parser PHP bežal približne 1,3-krát rýchlejšie. RFC otvorene hovorí, že JIT reálne aplikácie ako WordPress výrazne nezrýchľuje.

Dôvod je v profile typických webových aplikácií. Väčšinu času čakajú na databázu, súborový systém alebo externé služby. Rýchlejšia cesta procesora tam pomáha málo. Profitovať naopak môže spracovanie obrazu v PHP, matematické výpočty, parsery alebo dlho bežiace workery.

## Výkon bez JIT: účinnejšie páky

Pre firemné weby a obchody sa oplatí toto poradie:

1. **Aktuálna verzia PHP:** Nové verzie prinášajú optimalizácie a predovšetkým bezpečnostné opravy.
2. **Správne dimenzovať OPcache:** dostatok pamäte a miesta pre všetky súbory aplikácie.
3. **Vhodne nastaviť PHP-FPM:** `pm.max_children` prispôsobiť dostupnej operačnej pamäti, namiesto slepého zvyšovania.
4. **Skontrolovať databázu:** nájsť pomalé dotazy, nastaviť indexy.
5. **Caching na úrovni aplikácie:** cache stránok alebo objektov, kde to systém podporuje.
6. **Merať namiesto hádať:** `request_slowlog_timeout` v PHP-FPM zapisuje pri pomalých požiadavkách backtrace do slowlogu.

## JIT, výkon a bezpečnosť

Výkon a bezpečnosť spolu súvisia tesnejšie, než sa zdá. Po prvé: každá ďalšia súčasť je ďalší kód. RFC k zavedeniu samo uvádza riziko chýb v JIT, pri generovaní kódu a prideľovaní registrov, ako aj ťažšie hľadanie chýb. Kto JIT meraním nepotrebuje, nechá ho na štandardnom `disable`.

Po druhé: OPcache a workery držia kód v pamäti. Po bezpečnostnej aktualizácii, ako pri PHP2Shell, bežia staré procesy so starým kódom ďalej, kým sa nereštartujú. Vyprázdnenie cache samotné tento reštart nenahrádza, pretože zraniteľnosti CVE-2026-109618 a CVE-2026-109619 sídlia priamo v binárke PHP.

Po tretie: najlepší zisk výkonu, aktuálna verzia, je zároveň najdôležitejším ochranným opatrením. PHP 8.2 dosiahne 31. 12. 2026 koniec podpory; kto teraz prejde na 8.4 alebo 8.5, získa oboje. Ako udržiavame systémy trvalo rýchle a zabezpečené, opisuje [Zabezpečenie servera pre webové servery PHP](https://phpsos.de/sk/leistungen/server-haertung/).

## Ako PHP SOS konkrétne pomáha?

- **Analýza súčasného stavu:** Čítame nastavenia OPcache, JIT a FPM a porovnávame ich so záťažou a operačnou pamäťou.
- **Meranie úzkych miest:** Pomocou slowlogu a ukazovateľov servera zisťujeme, kde sa čas skutočne stráca.
- **Bezpečná konfigurácia:** JIT len tam, kde preukázateľne pomáha; OPcache tak, aby nasadenia a aktualizácie čisto zabrali.
- **Plánovanie aktualizácií:** Zmeny verzií s testom a zdokumentovaným reštartom, aby sedelo tempo aj stav záplat.


## Časté otázky

**Je JIT v PHP štandardne aktívny?**  
Od PHP 8.4 už nie: štandardná hodnota opcache.jit je disable. Predtým bol prednastavený tracing, no vyrovnávacia pamäť opcache.jit_buffer_size bola nastavená na 0, takže JIT tiež nebežal.

**Zrýchli JIT WordPress?**  
Sotva. Už v RFC k zavedeniu autori píšu, že JIT reálne aplikácie ako WordPress výrazne nezrýchľuje. Ich nameraná hodnota stúpla z 315 na 326 požiadaviek za sekundu.

**Potrebujem OPcache, ak JIT nepoužívam?**  
Áno. OPcache ukladá preložený bytecode do zdieľanej pamäte a pri každej požiadavke šetrí opakované kompilovanie. Pre takmer každý web v PHP je to najdôležitejšia páka výkonu. Od PHP 8.5 je OPcache pevne zabudovaná v PHP.

**Je JIT bezpečnostné riziko?**  
Viac kódu znamená viac možných chýb. RFC k zavedeniu samo uvádza riziko chýb v JIT a ťažšie hľadanie chýb. Kto ho nepotrebuje, nechá ho vypnutý; kto ho používa, mal by aktualizácie nasadzovať obzvlášť rýchlo.

## Zdroje

- [Príručka PHP: Nastavenia OPcache a JIT](https://www.php.net/manual/en/opcache.configuration.php)
- [PHP RFC: JIT (PHP 8.0)](https://wiki.php.net/rfc/jit)
- [PHP RFC: OPcache ako pevná súčasť (PHP 8.5)](https://wiki.php.net/rfc/make_opcache_required)
- [php.net: Vydanie PHP 8.4](https://www.php.net/releases/8.4/en.php)
