# JIT a výkon v PHP 8

> PHP JIT a výkon v PHP 8: jak JIT spolupracuje s OPcache, jaká nastavení platí a proč jsou aktualizace důležité pro rychlost i bezpečnost.

Zdroj: https://phpsos.de/cs/php/jit-und-performance/  
Stav: 25.10.2026  
Poskytovatel: PHP SOS, Nouzová pomoc pro PHP a bezpečnost serverů. Okamžitá pomoc přes WhatsApp: https://wa.me/491736494914?text=Dobr%C3%BD%20den%2C%20PHP%20SOS%2C%20pot%C5%99ebujeme%20pomoc%20s%20na%C5%A1%C3%ADm%20PHP%20serverem.%20Firma%3A%20%E2%80%A6%20Web%3A%20%E2%80%A6

**Stručně:** PHP JIT (just-in-time kompilátor) překládá často prováděný kód PHP za běhu do strojového kódu. Přišel s PHP 8.0, je součástí OPcache a od PHP 8.4 je ve výchozím stavu vypnutý. Výpočetně náročné úlohy se tím výrazně zrychlí, typické weby jako WordPress sotva. Větší přínos mají OPcache, aktuální verze PHP a vhodně nastavená správa procesů, a každá aktuální verze zároveň přináší nutné bezpečnostní opravy.

## Co je kompilátor JIT v PHP?

PHP je interpretovaný jazyk: zdrojový text se nejprve přeloží do bytecode, takzvaných opcodů, a ty provádí Zend Engine. JIT jde o krok dál. Sleduje, které části kódu se spouštějí často, a právě ty přeloží do strojového kódu pro procesor. Od té chvíle běží bez zacházky přes interpret.

RFC k zavedení popisuje JIT jako téměř samostatnou součást OPcache. Vytvořený strojový kód leží v dodatečné oblasti sdílené paměti OPcache. S PHP 8.4 projekt JIT postavil znovu; podle stránky vydání je nová implementace založena na frameworku IR, tedy společné mezireprezentaci pro generování kódu. Jak funguje engine pod ním, vysvětluje [Zend Engine](https://phpsos.de/cs/php/zend-engine/).

## Nejdřív OPcache: skutečný základ výkonu

Bez OPcache PHP překládá každý soubor při každém požadavku znovu. OPcache uchovává bytecode ve sdílené paměti, takže jej všichni workeři využívají opakovaně. Pro web se systémem pro správu obsahu je to zdaleka nejdůležitější páka. Od PHP 8.5 je OPcache podle přijatého RFC pevně zkompilována do PHP; známá nastavení ini nadále řídí, zda je cache aktivní.

Důležité výchozí hodnoty podle příručky: `opcache.enable=1`, `opcache.enable_cli=0`, `opcache.validate_timestamps=1` a `opcache.revalidate_freq=2`. S posledním nastavením OPcache kontroluje nejvýše každé dvě sekundy, zda se soubory změnily. Kdo `validate_timestamps` vypne, musí po každém nasazení cache vyprázdnit nebo PHP restartovat. Více v článku [OPcache vysvětlena](https://phpsos.de/cs/php/opcache/).

## Konfigurace PHP JIT: režimy a nastavení

JIT se řídí dvěma direktivami:

| Direktiva | Výchozí od 8.4 | Výchozí před 8.4 | Význam |
|---|---|---|---|
| `opcache.jit` | `disable` | `tracing` | režim JIT |
| `opcache.jit_buffer_size` | `64M` | `0` | paměť pro vytvořený strojový kód, `0` JIT vypne |

Pro `opcache.jit` zná příručka tyto hodnoty: `disable` (úplně vypnuto, za běhu nelze zapnout), `off` (vypnuto, ale za běhu zapnutelné), `tracing`, resp. `on` (pro většinu uživatelů doporučeno) a `function`. Vedle toho existuje čtyřmístný číselný zápis pro jemné ladění.

```ini
; JIT zapnout cíleně, např. pro výpočetně náročné workery
opcache.enable=1
opcache.jit=tracing
opcache.jit_buffer_size=64M
```

Zda JIT běží, ukazuje stav OPcache:

```bash
php -i | grep -i "opcache.jit"          # nastavení CLI
php --ri "Zend OPcache"                 # konfigurace rozšíření OPcache
```

Mějte na paměti, že příkazová řádka může používat jiná nastavení než PHP-FPM. Pro webový provoz platí výstup `phpinfo()` v kontextu FPM, ideálně vyvolaný jen interně a poté zase odstraněný.

## Co přináší JIT v praxi?

Autoři RFC měřili: syntetický skript bench.php běžel s JIT více než dvakrát rychleji. U reálných aplikací byl zisk malý; WordPress dosáhl 326 místo 315 požadavků za sekundu, parser PHP běžel zhruba 1,3krát rychleji. RFC otevřeně říká, že JIT reálné aplikace jako WordPress výrazně nezrychlí.

Důvod leží v profilu typických webových aplikací. Většinu času čekají na databázi, souborový systém nebo externí služby. Rychlejší cesta procesoru tam příliš nepomůže. Profitovat naopak mohou zpracování obrázků v PHP, matematické výpočty, parsery nebo dlouho běžící workery.

## Výkon bez JIT: účinnější páky

Pro firemní weby a e-shopy se vyplatí toto pořadí:

1. **Aktuální verze PHP:** nové verze přinášejí optimalizace a především bezpečnostní opravy.
2. **Správně dimenzovat OPcache:** dost paměti a místa pro všechny soubory aplikace.
3. **PHP-FPM vhodně nastavit:** `pm.max_children` přizpůsobit dostupné operační paměti, místo aby se slepě zvyšovalo.
4. **Zkontrolovat databázi:** najít pomalé dotazy, nastavit indexy.
5. **Cachování na úrovni aplikace:** cache stránek nebo objektů, kde to systém podporuje.
6. **Měřit místo hádání:** `request_slowlog_timeout` v PHP-FPM zapisuje pro pomalé požadavky backtrace do slowlogu.

## JIT, výkon a bezpečnost

Výkon a bezpečnost spolu souvisejí těsněji, než se zdá. Zaprvé: každá další komponenta je další kód. RFC k zavedení samo uvádí riziko chyb v JIT, při generování kódu a přidělování registrů, i obtížnější hledání chyb. Kdo JIT měřitelně nepotřebuje, nechá ho na výchozí hodnotě `disable`.

Zadruhé: OPcache a workery drží kód v paměti. Po bezpečnostní aktualizaci jako u PHP2Shell běží staré procesy se starým kódem dál, dokud se nerestartují. Vyprázdnění cache tento restart nenahradí, protože zranitelnosti CVE-2026-109618 a CVE-2026-109619 sídlí přímo v binárce PHP.

Zatřetí: největší zisk výkonu, tedy aktuální verze, je zároveň nejdůležitějším ochranným opatřením. PHP 8.2 končí podpora 31. 12. 2026; kdo nyní přejde na 8.4 nebo 8.5, získá obojí. Jak udržujeme systémy trvale rychlé a zpevněné, popisuje [zpevnění serveru pro webové servery s PHP](https://phpsos.de/cs/leistungen/server-haertung/).

## Jak konkrétně pomáhá PHP SOS?

- **Analýza současného stavu:** Přečteme nastavení OPcache, JIT a FPM a porovnáme je se zátěží a operační pamětí.
- **Měření úzkých míst:** Pomocí slowlogu a serverových ukazatelů zjistíme, kde se čas skutečně ztrácí.
- **Bezpečná konfigurace:** JIT jen tam, kde prokazatelně pomáhá; OPcache tak, aby nasazení a aktualizace správně zabíraly.
- **Plánování aktualizací:** Změny verzí s testem a zdokumentovaným restartem, aby sedělo tempo i stav záplat.


## Časté dotazy

**Je JIT v PHP standardně aktivní?**  
Od PHP 8.4 už ne: výchozí hodnota opcache.jit je disable. Dříve bylo přednastaveno tracing, ale buffer opcache.jit_buffer_size byl nastaven na 0, takže JIT také neběžel.

**Zrychlí JIT WordPress?**  
Sotva. Už v RFC k zavedení autoři píší, že JIT reálné aplikace jako WordPress výrazně nezrychlí. Jejich naměřená hodnota vzrostla z 315 na 326 požadavků za sekundu.

**Potřebuji OPcache, když JIT nepoužívám?**  
Ano. OPcache ukládá přeložený bytecode do sdílené paměti a při každém požadavku ušetří opakované kompilování. Pro téměř každý web v PHP je to nejdůležitější páka výkonu. Od PHP 8.5 je OPcache pevně zabudována v PHP.

**Je JIT bezpečnostní riziko?**  
Více kódu znamená více možných chyb. RFC k zavedení samo uvádí riziko chyb v JIT a obtížnější hledání chyb. Kdo ho nepotřebuje, nechá ho vypnutý; kdo ho používá, měl by aktualizace nasazovat obzvlášť rychle.

## Zdroje

- [Příručka PHP: Nastavení 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 jako pevná součást (PHP 8.5)](https://wiki.php.net/rfc/make_opcache_required)
- [php.net: Vydání PHP 8.4](https://www.php.net/releases/8.4/en.php)
