PHP’de Cache ve Hız Optimizasyonu Teknikleri

Performans, bir yazılımın kalitesini belirleyen en önemli faktörlerden biridir. Özellikle PHP ile geliştirilen web uygulamalarında, sayfa yüklenme süresi, veritabanı sorgularının hızı ve kullanıcı deneyimi doğrudan sistemin başarısını etkiler.Ben her zaman şunu savunurum: “Bir web projesi ne kadar güzel görünürse görünsün, eğer hızlı değilse, kullanıcıyı elinde tutamaz.”Bu yüzden PHP’de cache ve hız optimizasyonu konularına ciddi şekilde

Google News Google News Flipboard Flipboard Sesli oku Yazıyı beğen Favorilere Ekle 0 Yorumlar
Daha fazla

Performans, bir yazılımın kalitesini belirleyen en önemli faktörlerden biridir. Özellikle PHP ile geliştirilen web uygulamalarında, sayfa yüklenme süresi, veritabanı sorgularının hızı ve kullanıcı deneyimi doğrudan sistemin başarısını etkiler.
Ben her zaman şunu savunurum: “Bir web projesi ne kadar güzel görünürse görünsün, eğer hızlı değilse, kullanıcıyı elinde tutamaz.”
Bu yüzden PHP’de cache ve hız optimizasyonu konularına ciddi şekilde önem veririm.
Bu yazıda kendi tecrübelerim, kullandığım yöntemler ve teknik detayları paylaşacağım.


1. Performans Neden Bu Kadar Önemli?

Benim gözümde hız = kalite.
Bir kullanıcı bir siteye girdiğinde 3 saniyeden fazla bekliyorsa, o siteyi büyük ihtimalle terk eder.
Google bile bunu önemser çünkü SEO açısından da sayfa hızı çok kritik bir faktör.
PHP projelerinde performansı etkileyen başlıca sebepler şunlardır:

Ben genelde bir projeye başladığımda önce altyapıyı hız için tasarlarım. Çünkü sonradan yapılan optimizasyonlar her zaman daha zor olur.


2. Cache (Önbellekleme) Mantığı

Cache, en basit anlatımıyla “hazır bilgiyi saklama” sistemidir.
PHP’de cache kullanmak demek, her defasında aynı veriyi sıfırdan hesaplamak yerine, bir kez oluşturup daha sonra oradan çağırmak demektir.

Benim benimsediğim mantık şu:

“Cache, CPU’ya değil diske çalıştırma izni vermektir.”

2.1 Cache Türleri

  1. Output Cache:
    PHP çıktısını (HTML) geçici olarak kaydeder.
    Örneğin sayfa her istekte tekrar oluşturulmaz, cache’den direkt çekilir.

  2. Data Cache:
    Genellikle veritabanı sorgularında kullanılır.
    Sorgunun sonucunu saklar, aynı sorgu tekrar çağrıldığında doğrudan cache’den çeker.

  3. Opcode Cache:
    PHP kodlarının derlenmiş hâlini saklar.
    Bu sayede her istekte PHP’nin yeniden yorumlama yapmasına gerek kalmaz.

  4. Object Cache:
    Uygulama içinde sık kullanılan nesneleri bellekte tutar.
    Genellikle Memcached veya Redis gibi sistemlerle kullanılır.


3. PHP’de Cache Kullanım Yöntemleri

3.1 File Cache (Dosya Bazlı Cache)

Basit ama etkili bir yöntemdir.
Ben genelde küçük projelerde bu yöntemi tercih ederim.
Aşağıdaki örnekle, bir sayfayı dosya bazlı cache’le tutabiliriz:

<?php
$cache_file = 'cache/index.html';
$cache_time = 60; // saniye

if (file_exists($cache_file) && (time() - $cache_time < filemtime($cache_file))) {
readfile($cache_file);
exit;
}

ob_start();
// Buraya normal sayfa içeriği gelir
echo "<h1>Sayfa Oluşturuldu: " . date('H:i:s') . "</h1>";
$output = ob_get_contents();
ob_end_flush();
file_put_contents($cache_file, $output);
?>

Bu sistemde sayfa ilk kez oluşturulduğunda dosyaya yazılır.
Sonraki ziyaretlerde cache süresi dolmadıysa doğrudan o dosya sunulur.


3.2 OPcache (PHP’nin Kendi Cache Motoru)

Benim en çok önerdiğim cache sistemi bu.
OPcache, PHP’nin derlenmiş bytecode’unu bellekte tutar.
Bu sayede PHP kodu her istekte yeniden yorumlanmaz.

OPcache etkinleştirme:
php.ini dosyasına şunları eklersin:

opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=10000
opcache.revalidate_freq=2

Bu ayarlar genelde %30-70 arası hız artışı sağlar.
Ben kendi testlerimde bir Laravel projesinde 800ms olan ilk yükleme süresini 250ms’ye kadar düşürdüm.


3.3 APCu Cache

APCu (Alternative PHP Cache User) değişkenleri ve dizileri RAM’de saklar.
Ben genelde veritabanı sorgularını cache’lemek için kullanırım.

<?php
$key = 'kategoriler';
if (apcu_exists($key)) {
$data = apcu_fetch($key);
} else {
$data = $db->query("SELECT * FROM kategoriler")->fetchAll();
apcu_store($key, $data, 300); // 5 dakika cache
}
?>

Bu yöntemle veritabanı sorgu yükünü ciddi oranda azaltabilirsin.


3.4 Redis ile Cache

Redis, performans canavarı bir bellek tabanlı veri deposudur.
Benim gözümde büyük ölçekli projelerde olmazsa olmaz.
PHP ile Redis kullanmak için phpredis veya predis eklentisini kurmak gerekir.

<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);

if ($redis->exists('kategoriler')) {
$data = json_decode($redis->get('kategoriler'), true);
} else {
$data = $db->query("SELECT * FROM kategoriler")->fetchAll();
$redis->set('kategoriler', json_encode($data), 300);
}
?>

Redis’in en güzel yanı hem cache hem de oturum yönetimi için kullanılabilmesidir.


3.5 Memcached ile Cache

Memcached da tıpkı Redis gibi çalışır ama biraz daha hafiftir.
Yoğun trafik altında inanılmaz fark yaratır.

<?php
$mem = new Memcached();
$mem->addServer("localhost", 11211);

$data = $mem->get("urunler");
if (!$data) {
$data = $db->query("SELECT * FROM urunler")->fetchAll();
$mem->set("urunler", $data, 300);
}
?>

Ben kendi blog projemde Redis yerine Memcached kullandığımda CPU kullanımında %40 azalma gördüm.


4. Veritabanı Optimizasyonu

Cache sadece dosya veya kod seviyesinde olmaz.
Bence asıl farkı veritabanı optimizasyonu yaratır.

  • Index kullan:
    Sorgularda WHERE koşulundaki alanlara index ekle.
    CREATE INDEX idx_user_id ON users(user_id);

  • Sorguları birleştir:
    Gereksiz alt sorgular yerine JOIN kullan.

  • Limit kullan:
    Büyük veri listelerinde LIMIT ve OFFSET ile sayfalama yap.

  • Prepared Statements kullan:
    Güvenlik ve hız açısından çok fark eder.

Ben sorgularıma her zaman EXPLAIN ile bakarım, gereksiz full table scan varsa düzeltirim.


5. Kod Optimizasyonu

  • echo birleştirmelerini azalt.

  • Gereksiz include veya require dosyalarını kaldır.

  • Döngülerde veritabanı çağrısı yapma.

  • Sabit değerleri her seferinde hesaplama, değişkende tut.

  • Büyük JSON verilerini gzcompress() ile sıkıştır.

Benim gözlemim şu:

Kod sadeleştikçe, proje doğal olarak hızlanıyor.


6. Output Buffering ve gzip Sıkıştırma

ob_start() ile PHP çıktısını belleğe alabilir, gzip ile sıkıştırabilirsin.
Ben her projemin başına şunu eklerim:

<?php
ob_start("ob_gzhandler");
?>

Bu sayede HTML çıktısı sıkıştırılır ve kullanıcıya çok daha hızlı iletilir.


7. CDN Entegrasyonu

Ben cache kadar CDN’i de önemli görürüm.
Statik dosyaları (resim, JS, CSS) CDN üzerinden sunmak, ana sunucunun yükünü azaltır.
Cloudflare, BunnyCDN veya KeyCDN gibi servislerle PHP tabanlı sitelerde ciddi fark yaratılır.


8. Performans Testi ve Ölçüm

Ben her zaman ölçmeden geliştirme yapmam.
Bunun için şu araçları kullanırım:

  • ApacheBench (ab) → Basit yük testi

  • JMeter → Gelişmiş performans testi

  • Google Lighthouse → Tarayıcı tarafı hız analizi

  • Blackfire & Xdebug → PHP performans profil araçları


9. Gerçek Proje Deneyimim

Bir blog sistemimde Redis + OPcache kullandım.
Sonuç:

  • Sayfa yüklenme süresi: 1.2 saniyeden 300ms’ye düştü

  • Sunucu CPU kullanımı: %60 → %25

  • Kullanıcı sayısı 3 kat arttı ama sunucu tepki süresi değişmedi.

Bu farkı görünce cache’in önemine daha da inandım.


10. Sonuç ve Benim Görüşüm

PHP’de hız optimizasyonu bir seçenek değil, zorunluluk.
Benim gözümde “optimize edilmemiş kod, eksik koddur.”
Cache, sorgu optimizasyonu, gzip ve OPcache gibi yöntemlerle bir sistem 3 kat hızlı hale gelebilir.
Ama asıl mesele, bu teknikleri doğru yerde, doğru şekilde kullanmaktır.

Benim tarzım hep şu oldu:

“Önce ölç, sonra optimize et.”

Ne kadar güçlü bir sunucu kullanırsan kullan, kötü yapılandırılmış PHP kodu sistemi yavaşlatır.
İyi bir geliştirici sadece kod yazmaz, kodun nasıl çalıştığını da anlar.

Ve ben bunu her projede ilke edindim.

Yazar Hakkında

Benzer Yazılar

Bir Cevap Yaz

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir.

0/30 karakter