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) yerine isset($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:
    1. php.ini dosyasında aşağıdaki ayarları yapın:
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
  1. 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 connections ayarları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-autoloader ile 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_processes ve worker_connections değ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).

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.