PHP Performans Optimizasyonu Rehberi
PHP, dinamik web geliştirme süreçlerinde en yaygın kullanılan dillerdendir. Bununla birlikte, özellikle büyük uygulamalarda performansı düşük PHP kodları, yavaş yükleme süreleri ve yüksek sunucu maliyetlerine yol açabilir. Bu rehberde, PHP uygulamalarınızı optimize etmek, hızlandırmak ve daha verimli hale getirmek için kullanabileceğiniz en kapsamlı yöntemlere değineceğiz.
1. Kod Yazım ve Yapılandırma Optimizasyonu
a. Verimli Kod Yazma
- Satır Satır Kod İncelemesi Yapın: Daha kısa ve optimize edilen kodlar yazmaya özen gösterin, gereksiz döngülerden ve tekrar eden kodlardan kaçının.
- Daha Az İşlem Maliyeti Olan Fonksiyonlar Kullanın: Örneğin,
strlen($string)yerineisset($string[0])kullanımı çok daha hızlıdır. - Veritabanına Gereksiz Çağrıları Azaltın: Veritabanına yaptığınız sorgu sayısını minimumda tutmaya çalışın. Mümkünse toplu işlemler kullanın.
b. Kod Standardizasyonu ve Framework Kullanımı
- PSR Standartlarına Uyun (PSR-1 & PSR-2 gibi): Kodun standartlara uygun ve kolay okunabilir olmasını sağlar.
- Framework'leri Optimize Kullanma: Laravel, Symfony gibi frameworklerde kullanılmayan modülleri devre dışı bırakın ve gereksiz yüklerden kurtulun.
2. Cache (Önbellek) Uygulama
a. Opcode Cache Kullanımı
PHP kodları her çalıştırıldığında derlenir ve işlemcide çalıştırılır. Bu işlemi hızlandırmak için OPcache kullanabilirsiniz.
- OPcache, PHP kodlarını derlenmiş bytecode olarak saklar ve daha sonraki çağrılarda doğrudan bulunduğu haliyle çalıştırır.
- OPcache’i etkinleştirmek için:
php.inidosyasında aşağıdaki ayarları yapın:
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
- PHP ile çalışan sunucunuzda OPcache’i yeniden başlatın.
b. Veritabanı Önbellekleme
- Query Cache Kullanımı: Sorgu sonuçlarını belirli bir süre boyunca önbelleğe almak, aynı sorgunun tekrar tekrar işlenmesini önler.
- Redis veya Memcached:
- Redis: Anahtar/değer tabanlı hızlı bir önbellek sistemidir.
- Memcached: Büyük ölçekli projelerde sıklıkla kullanılan başka bir hafif önbellek çözümüdür.
c. Tam Sayfa Cache
Statik sayfalarda, tam sayfa önbellekleme ile PHP'nin her işlemde çalışmasını önleyebilirsiniz:
- Laravel Cache veya Symfony Cache sistemlerini etkinleştirin.
- CDN (Content Delivery Network) kullanarak statik içerikleri daha hızlı sunabilirsiniz.
3. Veritabanı ve Sorgu Performans Optimizasyonu
a. Sorguları Minimize Edin
- Lazy Loading Yerine Eager Loading Kullanımı: Özellikle ilişkili verileri çekerken N+1 sorunundan kaçınmak için ORM araçlarında (örneğin, Eloquent)
with()kullanın. - Örnek:
// Yavaş:
foreach ($users as $user) {
echo $user->profile->name;
}
// Hızlı - Eager Loading:
$users = User::with('profile')->get();
b. Sorguları Optimize Edin
- Veritabanı sorguları için EXPLAIN kullanarak sorgularınızın ne kadar performanslı olduğuna bakın.
- Gerekli tablolar için INDEX ekleyin. Çok fazla veri içeren tablolar için indeksleme performansı artırır.
c. Veritabanı Bağlantı Havuzlama
- Veritabanı bağlantı havuzlama ile her isteğe yeniden bağlantı kurmak yerine açık bağlantıları yeniden kullanabilirsiniz.
- Örneğin, Laravel'de
persistent database connectionsayarlarınızı etkinleştirin.
4. PHP Framework Optimizasyonları
a. Laravel Performans Optimizasyonu
Laravel popüler bir framework olduğundan, onun için özel performans ipuçları sunabiliriz:
- Route Caching: Uygulamanızın route/method eşleşmelerini optimize edin. Komutu çalıştırın:
php artisan route:cache
- Config Caching:
php artisan config:cache
- Query Loglamayı Devre Dışı Bırakın:
DB::disableQueryLog();
- View Caching: Blade şablonlarınızı önceden derleyin:
php artisan view:cache
b. Symfony Performans Optimizasyonu
Symfony’de performansı artırmak için:
composer --optimize-autoloaderile autoload yönetimini optimize edebilirsiniz.- Veritabanı ve Twig şablon optimizasyonları yaparak yükleme sürelerini kısaltabilirsiniz.
5. PHP Sunucu Optimizasyonu
a. PHP'nin Güncel Versiyonunu Kullanma
PHP'nin her yeni sürümü önceki sürümlere kıyasla daha hızlıdır. Örneğin:
- PHP 8.x, önceki sürümlerden %20-25 daha hızlıdır (özellikle JIT desteği sayesinde).
b. Nginx veya Apache Ayarları
- Nginx daha hızlı ve daha ölçeklenebilir bir yapı sunar. Özellikle PHP için uygun ayarlarla performansınızı artırabilirsiniz.
worker_processesveworker_connectionsdeğerlerini artırarak aynı anda daha fazla bağlantıya izin verin.
- Apache kullanıyorsanız:
- Gereksiz modülleri devre dışı bırakın (örneğin,
mod_php,mod_rewrite).
- Gereksiz modülleri devre dışı bırakın (örneğin,
c. CDN ve Yük Dengeleme (Load Balancer) Kullanın
Büyük ölçekli projelerde statik dosyaları (CSS, JS, görseller) barındırmak için bir CDN (Cloudflare, Akamai vb.) kullanarak frontend yükünü azaltabilirsiniz.
6. PHP ile Dosya İşlemleri Optimizasyonu
a. Gereksiz Disk I/O’yu Azaltma
Dosya okunmasını minimumda tutmak için, yapılandırma verileri veya sık kullanılan veriler için bellek tabanlı çözümler (Redis veya Memcached) kullanın.
b. Çıkış (Output) Tamponlamayı Etkinleştirin
PHP kodu çıktı üretirken buffer (tamponlama) kullanarak performansı artırabilirsiniz.
- Örnek:
ob_start();
echo "Çok fazla çıktı üretiyorum...";
ob_end_flush();
7. Bağımlılık Yönetimi ve Yükleme Sürelerini Azaltma
a. Composer Optimizasyonu
PHP projelerinde bağımlılıkları yönetmek için Composer kullanıyorsanız:
- --optimize-autoloader seçeneği ile proje bağımlılıklarını optimize edin:
composer install --optimize-autoloader --no-dev
b. Gereksiz Paketlerden Kaçının
Composer projelerinde gereksiz kütüphane veya paket kullanımları performans kaybına yol açabilir. Kullanılmayan paketleri düzenli olarak kaldırın:
composer remove [paket-adi]
8. Kolay Yapılandırmalar için Tavsiye Araçlar
- New Relic & Blackfire.io: PHP uygulamalarınızın performans raporlarını analiz ederek, performans darboğazlarını tespit etmek için harika araçlardır.
- Tideways: PHP performans izleme ve hata ayıklama için kullanılır.
Yorumlar
8gw0kz
8gw0kz
Yeni Yorum Ekle