# JIT i performanse u PHP-u 8

> PHP JIT i performanse u PHP-u 8: kako JIT kompilator radi s OPcacheom, koje postavke vrijede i zašto su ažuriranja važna za brzinu i sigurnost.

Izvor: https://phpsos.de/hr/php/jit-und-performance/  
Stanje: 25.10.2026  
Pružatelj: PHP SOS, PHP hitna pomoć i sigurnost poslužitelja. Hitna pomoć putem WhatsAppa: https://wa.me/491736494914?text=Pozdrav%20PHP%20SOS%2C%20trebamo%20pomo%C4%87%20s%20na%C5%A1im%20PHP%20poslu%C5%BEiteljem.%20Tvrtka%3A%20%E2%80%A6%20Web-stranica%3A%20%E2%80%A6

**Ukratko:** PHP JIT (just-in-time kompilator) često izvršavani PHP kod tijekom rada prevodi u strojni kod. Stigao je s PHP-om 8.0, dio je OPcachea i od PHP-a 8.4 prema zadanim je postavkama isključen. Računski zahtjevni zadaci time postaju znatno brži, a tipične web-stranice poput WordPressa jedva. Veći dobitak donose OPcache, aktualna verzija PHP-a i prikladno podešeno upravljanje procesima, a svaka aktualna verzija istodobno donosi potrebne sigurnosne ispravke.

## Što je JIT kompilator u PHP-u?

PHP je interpretirani jezik: izvorni se tekst najprije prevodi u bytecode, takozvane opcodeove, a njih izvršava Zend Engine. JIT ide korak dalje. Promatra koji se dijelovi koda često izvršavaju i upravo ih prevodi u strojni kod za procesor. Od tada se izvršavaju bez zaobilaznog puta preko interpretera.

RFC o uvođenju opisuje JIT kao gotovo samostalan dio OPcachea. Stvoreni strojni kod nalazi se u dodatnom području zajedničke memorije OPcachea. S PHP-om 8.4 projekt je JIT iznova izgradio; prema stranici izdanja nova se implementacija temelji na IR frameworku, zajedničkom međuprikazu za generiranje koda. Kako motor radi ispod toga, objašnjava [Zend Engine](https://phpsos.de/hr/php/zend-engine/).

## Najprije OPcache: prava osnova performansi

Bez OPcachea PHP svaku datoteku iznova prevodi pri svakom zahtjevu. OPcache bytecode čuva u zajedničkoj memoriji tako da ga svi workeri ponovno koriste. Za web-stranicu sa sustavom za upravljanje sadržajem to je daleko najvažnija poluga. Od PHP-a 8.5 OPcache je prema prihvaćenom RFC-u čvrsto ugrađen u PHP; poznate ini postavke i dalje upravljaju time je li predmemorija aktivna.

Važne zadane vrijednosti prema priručniku: `opcache.enable=1`, `opcache.enable_cli=0`, `opcache.validate_timestamps=1` i `opcache.revalidate_freq=2`. Prema posljednjoj postavci OPcache najviše svake dvije sekunde provjerava jesu li se datoteke promijenile. Tko isključi `validate_timestamps`, mora nakon svakog deploymenta isprazniti predmemoriju ili ponovno pokrenuti PHP. Više u članku [OPcache objašnjen](https://phpsos.de/hr/php/opcache/).

## Konfiguriranje PHP JIT-a: načini i postavke

JIT se kontrolira dvjema direktivama:

| Direktiva | Zadano od 8.4 | Zadano prije 8.4 | Značenje |
|---|---|---|---|
| `opcache.jit` | `disable` | `tracing` | način rada JIT-a |
| `opcache.jit_buffer_size` | `64M` | `0` | memorija za stvoreni strojni kod, `0` isključuje JIT |

Za `opcache.jit` priručnik poznaje ove vrijednosti: `disable` (potpuno isključeno, tijekom izvođenja ne može se uključiti), `off` (isključeno, ali se tijekom izvođenja može uključiti), `tracing` odnosno `on` (preporučeno za većinu korisnika) i `function`. Uz to postoji četveroznamenkasti brojčani zapis za fina podešavanja.

```ini
; JIT ciljano uključiti, npr. za računski zahtjevne workere
opcache.enable=1
opcache.jit=tracing
opcache.jit_buffer_size=64M
```

Radi li JIT, pokazuje status OPcachea:

```bash
php -i | grep -i "opcache.jit"          # postavke CLI-ja
php --ri "Zend OPcache"                 # konfiguracija ekstenzije OPcache
```

Imajte na umu da naredbeni redak može koristiti druge postavke nego PHP-FPM. Za web-rad vrijedi izlaz `phpinfo()` u FPM kontekstu, idealno pozvan samo interno i nakon toga uklonjen.

## Što JIT donosi u praksi?

Autori RFC-a mjerili su: sintetička skripta bench.php s JIT-om je radila više nego dvostruko brže. Kod stvarnih aplikacija dobitak je bio malen; WordPress je postigao 326 umjesto 315 zahtjeva u sekundi, a PHP parser radio je otprilike 1,3 puta brže. RFC otvoreno kaže da JIT ne ubrzava znatno stvarne aplikacije poput WordPressa.

Razlog je u profilu tipičnih web-aplikacija. Većinu vremena čekaju na bazu podataka, datotečni sustav ili vanjske usluge. Brži put procesora tu malo pomaže. Koristi, naprotiv, mogu imati obrada slika u PHP-u, matematički izračuni, parseri ili dugotrajni workeri.

## Performanse bez JIT-a: učinkovitije poluge

Za web-stranice poduzeća i shopove isplati se ovaj redoslijed:

1. **Aktualna verzija PHP-a:** nove verzije donose optimizacije i prije svega sigurnosne ispravke.
2. **Ispravno dimenzionirati OPcache:** dovoljno memorije i mjesta za sve datoteke aplikacije.
3. **Prikladno podesiti PHP-FPM:** `pm.max_children` prilagoditi dostupnoj radnoj memoriji, umjesto da se slijepo povećava.
4. **Provjeriti bazu podataka:** pronaći spore upite, postaviti indekse.
5. **Predmemoriranje na razini aplikacije:** predmemorija stranica ili objekata, gdje sustav to podržava.
6. **Mjeriti umjesto nagađati:** `request_slowlog_timeout` u PHP-FPM-u za spore zahtjeve zapisuje backtrace u slowlog.

## JIT, performanse i sigurnost

Performanse i sigurnost povezani su tješnje nego što se čini. Prvo: svaka dodatna komponenta dodatan je kod. RFC o uvođenju sâm navodi rizik pogrešaka u JIT-u, u generiranju koda i dodjeli registara, te teže traženje pogrešaka. Tko JIT ne treba mjerljivo, ostavlja ga na zadanom `disable`.

Drugo: OPcache i workeri drže kod u memoriji. Nakon sigurnosnog ažuriranja poput onog za PHP2Shell stari procesi sa starim kodom nastavljaju raditi dok se ponovno ne pokrenu. Samo pražnjenje predmemorije ne zamjenjuje to ponovno pokretanje jer ranjivosti CVE-2026-109618 i CVE-2026-109619 leže u samoj PHP binarnoj datoteci.

Treće: najbolji dobitak performansi, aktualna verzija, istodobno je i najvažnija zaštitna mjera. PHP 8.2 dosiže kraj podrške 31. 12. 2026.; tko sada prijeđe na 8.4 ili 8.5, dobiva oboje. Kako sustave trajno održavamo brzima i ojačanima, opisuje [ojačavanje poslužitelja za PHP web-poslužitelje](https://phpsos.de/hr/leistungen/server-haertung/).

## Kako PHP SOS konkretno pomaže?

- **Analiza postojećeg stanja:** Očitavamo postavke OPcachea, JIT-a i FPM-a i uspoređujemo ih s opterećenjem i radnom memorijom.
- **Mjerenje uskih grla:** Slowlogom i pokazateljima poslužitelja pronalazimo gdje se vrijeme stvarno gubi.
- **Sigurna konfiguracija:** JIT samo gdje dokazano pomaže; OPcache tako da deploymenti i ažuriranja uredno djeluju.
- **Planirati ažuriranja:** Promjene verzije s testom i dokumentiranim ponovnim pokretanjem, kako bi brzina i stanje zakrpa bili usklađeni.


## Česta pitanja

**Je li JIT u PHP-u prema zadanim postavkama aktivan?**  
Od PHP-a 8.4 više nije: zadana vrijednost opcache.jit je disable. Prije je bio postavljen tracing, ali je međuspremnik opcache.jit_buffer_size bio na 0, pa JIT također nije radio.

**Ubrzava li JIT WordPress?**  
Jedva. Već u RFC-u o uvođenju autori pišu da JIT ne ubrzava znatno stvarne aplikacije poput WordPressa. Njihova izmjerena vrijednost porasla je s 315 na 326 zahtjeva u sekundi.

**Treba li mi OPcache ako ne koristim JIT?**  
Da. OPcache sprema preveden bytecode u zajedničku memoriju i pri svakom zahtjevu štedi ponovno kompiliranje. To je za gotovo svaku PHP web-stranicu najvažnija poluga performansi. Od PHP-a 8.5 OPcache je čvrsto ugrađen u PHP.

**Je li JIT sigurnosni rizik?**  
Više koda znači više mogućih pogrešaka. RFC o uvođenju sâm navodi rizik pogrešaka u JIT-u i teže traženje pogrešaka. Tko ga ne treba, neka ga ostavi isključenim; tko ga koristi, trebao bi osobito brzo instalirati ažuriranja.

## Izvori

- [PHP priručnik: postavke OPcachea i JIT-a](https://www.php.net/manual/en/opcache.configuration.php)
- [PHP RFC: JIT (PHP 8.0)](https://wiki.php.net/rfc/jit)
- [PHP RFC: OPcache kao čvrsti sastavni dio (PHP 8.5)](https://wiki.php.net/rfc/make_opcache_required)
- [php.net: Izdanje PHP-a 8.4](https://www.php.net/releases/8.4/en.php)
