OPcache, bir Laravel uygulaması için yapabileceğiniz en etkili performans optimizasyonudur. Ancak, üretim sunucularının çoğu ya bunu hiç kullanmıyor ya da suboptimal ayarlarla kullanıyor. OPcache’i etkinleştirmek ve düzgün yapılandırmak genellikle kod değişikliği yapmadan, istek başına 2x ila 4x iyileşme sağlar.
Deploynix, varsayılan olarak tüm sağlanan sunucularda OPcache’i etkinleştirir. Ancak “etkin” olmak ve “optimum şekilde yapılandırılmış” olmak farklı şeylerdir. Bu kılavuz, OPcache’in ne yaptığını açıklar, Laravel uygulamaları için optimum ayarları sunar, ön yükleme (preloading) özelliğini kapsar ve çoğu geliştiricinin dikkatinin dağılmasına neden olan önbellek geçersiz kılma (cache invalidation) zorluklarını ele alır.
OPcache’in Gerçekten Ne Yaptığı
OPcache’in Gerçekten Ne Yaptığı
PHP bir script çalıştırdığında, dört aşamadan geçer:
- Lexing: Kaynak kodu token’lara ayrılır
- Parsing: Token’lar bir Abstract Syntax Tree (AST) olarak düzenlenir
- Compilation: AST, opcodes’a (PHP sanal makinesi için bayt kodu talimatları) derlenir
- Execution: Opcode’lar Zend VM tarafından çalıştırılır
OPcache olmadan, 1-3. aşamalar her bir istek için her bir PHP dosyası için gerçekleştirilir. Tipik bir Laravel isteği, 200-400 PHP dosyasını yükler (framework dosyaları, paket dosyaları, uygulama kodunuz). Bu, her istekte 200-400 dosyanın lexing, parsing ve compilation işlemlerine tabi tutulması demektir.
OPcache, derlenmiş opcode’ları paylaşılan bellekte önbelleğe alır. İlk isteğin bir dosyayı derlemesi sonrasında, sonraki istekler 1-3. aşamaları tamamen atlayarak doğrudan execution aşamasına geçer. Derleme maliyeti bir kez ödenmiş olur, saniyede binlerce kez değil.
Bu durum performans iyileşmesinin neden bu kadar çarpıcı olduğunu açıklar. Bir Laravel uygulaması için derleme, genellikle toplam istek işleme zamanının %50-75’ini oluşturur. Bunu ortadan kaldırmak, üretkenliğinizi iki katına veya dört katına çıkarır.
OPcache’in Etkin Olduğunu Doğrulama
OPcache’in Etkin Olduğunu Doğrulama
Deploynix ile yönetilen sunucunuzda OPcache durumunu kontrol edin:
php -i | grep opcache.enable
Aşağıdaki çıktıyı görmelisiniz:
opcache.enable => On => On
opcache.enable_cli => Off => Off
OPcache’in FPM için etkin ( opcache.enable = 1 ) olması gerekir, ancak genellikle CLI için devre dışı bırakılır ( opcache.enable_cli = 0 ) çünkü CLI script’leri kısa ömürlüdür ve önbelleklemeden fayda sağlamaz.
Daha detaylı bir durum raporu almak için geçici bir PHP dosyası oluşturun:
php
Kaynak: Orijinal Makale


