
PHP 8.4'te JIT: Performansa Gerçek Etkisi
JIT, PHP kodunun bir bölümünü çalışma anında makine koduna çeviren derleyici. Duyurulduğundan bu yana beklenti ile gerçek kazanç arasında belirgin bir fark oluştu. Beklenti her uygulamanın hızlanmasıydı; gerçekte kazanç işin türüne sıkı biçimde bağlı.
Farkı anlamak için önce PHP'nin bir isteği nasıl çalıştırdığına bakmak gerekir.
Opcache ile JIT arasındaki fark
PHP kaynak dosyayı önce ara koda çevirir, sonra bu ara kodu çalıştırır. Opcache, çevirme adımının sonucunu bellekte tutar; böylece aynı dosya her istekte yeniden çözümlenmez. Kazanç büyüktür ve neredeyse her uygulamada geçerlidir.
JIT bir adım öteye gider ve sık çalışan ara kod parçalarını makine koduna çevirir. Yani opcache çözümleme maliyetini, JIT ise yürütme maliyetini azaltır. Opcache açık değilse JIT devreye giremez.
Web isteklerinde kazanç neden sınırlı?
Tipik bir web isteğinde geçen sürenin büyük bölümü hesaplamada değil bekleme sırasında harcanır: veritabanı sorgusu, dosya okuma, dış servis çağrısı, şablon üretimi. JIT yalnızca hesaplama süresine dokunduğu için toplam üzerindeki etkisi küçük kalır.
Sorgu süresi iki yüz milisaniye olan bir sayfada, PHP tarafındaki on milisaniyenin sekize inmesi kullanıcı açısından fark edilmez. Bu tür uygulamalarda gerçek kazanç sorgu iyileştirmesi ve önbellekleme ile elde edilir.
JIT hangi işlerde fark yaratır?
- Görüntü işleme ve piksel düzeyinde döngüler.
- Matematiksel hesaplama, simülasyon ve sayısal analiz.
- Sıkıştırma, şifreleme gibi yoğun döngü içeren algoritmalar.
- Uzun süre çalışan komut satırı işleri ve kuyruk işleyicileri.
Ortak nokta şudur: iş, dış kaynağı beklemeden işlemciyi meşgul ediyorsa JIT kazanç sağlar. Bu tür işlerde iki katına yaklaşan hızlanmalar ölçülmüştür.
Yapılandırma
JIT opcache ayarları altında tanımlanır. Bellek ayrımı ve tetikleme modu belirlenir. Aşağıdaki ayar, izleme temelli modda makul bir başlangıç noktası sunar:
; php.ini
opcache.enable=1
opcache.jit_buffer_size=64M
opcache.jit=tracingTampon boyutu sıfır bırakıldığında JIT tamamen devre dışı kalır. Ayarların komut satırı için ayrı yapılandırılabildiği de unutulmamalıdır; web ve komut satırı çoğu kurulumda farklı yapılandırma dosyası kullanır.
Ölçmeden ayar değiştirmemek
Performans çalışmasında sıra önemlidir. Önce ölçüm yapılır, darboğazın nerede olduğu belirlenir, sonra o noktaya müdahale edilir. JIT'i açıp sonucu ölçmemek, kazancın olup olmadığını bilinmez bırakır.
Ölçüm için istek düzeyinde profil çıkaran araçlar kullanılır. Çıktıda sürenin nereye gittiği görüldüğünde, çoğu uygulamada ilk sıraya veritabanı ve dış servis çağrılarının yerleştiği ortaya çıkar.
Önce hangi iyileştirme yapılmalı?
Performans çalışmasında etkisi en büyük müdahaleler genellikle dilin kendisiyle ilgili değildir. Sıralama çoğu uygulamada şu şekilde işler: önce gereksiz sorgular kaldırılır, sonra kalan sorgular indekslenir, ardından tekrar üretilen sonuçlar önbelleğe alınır.
Döngü içinde çalışan sorgu, bu listenin en tepesindeki sorundur. Yüz satır listelenirken her satır için ayrı sorgu çalıştırmak, tek sorguyla alınabilecek veriyi yüz kat pahalı hale getirir. Bu düzeltme yapılmadan yürütme hızını artırmaya çalışmak sonuç vermez.
Önbellekleme ise en son ele alınmalıdır. Yanlış yerde kurulan önbellek, var olan sorunu gizler ve veri tutarlılığıyla ilgili yeni sorunlar üretir. Sorgu düzeltildikten sonra eklenen önbellek ise hem daha basit hem daha güvenilir olur.
Bu adımlar tamamlandıktan sonra hâlâ işlemci sınırına takılan bir iş kalıyorsa, JIT anlamlı bir seçenek haline gelir.
Kontrol listesi
- Opcache her ortamda açık tutulur.
- JIT yalnızca işlemci yoğun işlerde beklenti oluşturur.
- Tampon boyutu ayarlanmadan JIT etkinleşmez.
- Değişiklik öncesi ve sonrası ölçüm yapılır.
- Darboğaz veritabanındaysa önce sorgu ele alınır.
İlgili yazılar
Yorumlar
İlk yorumu sen yap.
İlgili Yazılar

PHP Uygulamasını Üretime Almak: Yapılandırma ve Güvenlik
Geliştirme makinesinde çalışan kod ile üretimde güvenle çalışan kod arasındaki fark yapılandırmadır. Ayarlar, izinler, dağıtım akışı ve son kontroller.

PHP ile REST API Yazmak: Yönlendirme ve HTTP Durum Kodları
Bir API'nin kalitesi çoğunlukla ayrıntılarda belli olur: doğru durum kodu, tutarlı hata biçimi ve öngörülebilir adresler. Saf PHP ile uçtan uca kurulum.

PHPUnit ile Birim Test Yazmak: Kurulum, Sahte Nesneler ve Kapsam
Testin amacı hata bulmak değil, değişikliği güvenle yapabilmektir. Kurulum, ilk test, sahte nesneler ve test edilebilir kodun özellikleri.