
Her ziyaretçi geldiğinde PHP çalışıyor, veritabanına onlarca sorgu gidiyor ve aynı HTML tekrar tekrar üretiliyor. Oysa içerik saatlerdir değişmedi. Bu tekrarı ortadan kaldırmak, paylaşımlı hostingde alabileceğiniz en büyük hız kazancıdır.
Bu yazı, tam sayfa önbelleklemeyi ele alıyor.
Nasıl Çalışır?
Sayfa önbelleği, üretilen HTML'i saklayıp sonraki isteklere doğrudan sunar:
- İlk ziyaretçi gelir
- Sayfa normal şekilde üretilir
- Üretilen HTML bir dosyaya kaydedilir
- Sonraki ziyaretçiye bu dosya sunulur
- PHP ve veritabanı hiç devreye girmez
Beşinci adım kazancın kaynağıdır: önbellekten sunulan bir sayfa, statik bir dosya kadar hızlıdır — çünkü fiilen statik bir dosyadır.
Kaynak tüketiminiz de aynı oranda düşer. Paylaşımlı hostingde kaynak limiti sorunu yaşayan sitelerin çoğu, bu tek değişiklikle rahatlar.
Hangi Sayfalar Uygun?
Her sayfa önbelleklenemez. Ayrım nettir:
| Uygun | Uygun değil |
|---|---|
| Blog yazıları | Sepet sayfası |
| Ürün listeleri | Hesabım sayfaları |
| Kategori sayfaları | Ödeme adımları |
| Kurumsal sayfalar | Yönetim paneli |
| Ana sayfa | Arama sonuçları |
Ayrımı belirleyen soru şudur: bu sayfa her ziyaretçiye aynı mı görünüyor?
Yanıt evetse önbelleklenebilir. Kişiye özel bir öğe varsa — kullanıcı adı, sepet sayısı, kişiselleştirilmiş öneriler — dikkat gerekir.
En Büyük Tehlike
Yanlış yapılandırılmış bir sayfa önbelleği ciddi bir gizlilik sorunu üretir:
- Giriş yapmış bir kullanıcının sayfası önbelleğe alınır.
- Bir sonraki ziyaretçiye o sayfa sunulur.
- Yabancı biri başkasının adını ve bilgilerini görür.
Bu senaryo teorik değildir ve sık yaşanır: giriş yapmış kullanıcıların sayfalarını önbelleğe almamak, kurulumun ilk ve en kritik kuralıdır.
Korunma yöntemi basittir — oturum çerezi taşıyan istekler önbelleği tamamen atlamalıdır. Çoğu önbellek çözümü bunu varsayılan olarak yapar ama doğrulanması şarttır.
Karma Sayfalar
Sayfanın çoğu ortak, küçük bir kısmı kişiye özelse çözümler vardır:
- Kişisel kısmı istemci tarafında doldurun. Ayrı bir istekle.
- Sayfayı önbellekleyin, o parçayı boş bırakın.
- Küçük bir betik eksik veriyi çeksin.
Bu yaklaşımın kazancı orantısızdır: yalnızca sepet sayısı için tüm sayfayı dinamik tutmak, çok küçük bir ihtiyaç için çok büyük bir maliyet ödemektir.
Sayfanın tamamı önbellekten gelir, yalnızca birkaç yüz baytlık bir istek dinamik çalışır. Sunucu yükü büyük ölçüde düşer.
Önbellek Temizleme
Önbelleğin en kritik yanı, ne zaman geçersiz kılınacağıdır:
| Olay | Temizlenecek |
|---|---|
| Yazı güncellendi | O sayfa, ana sayfa, kategori |
| Yeni ürün eklendi | Listeler ve kategoriler |
| Fiyat değişti | Ürün ve liste sayfaları |
| Yorum onaylandı | İlgili yazı |
| Menü değişti | Tüm sayfalar |
Birinci satır sık atlanan bir ayrıntı içerir: bir yazıyı güncellediğinizde yalnızca o sayfayı temizlemek yetmez — ana sayfa ve kategori listelerinde de o yazının başlığı görünür.
Beşinci satır ise tam temizlik gerektirir. Menü tüm sayfalarda bulunduğu için değiştiğinde önbelleğin tamamı geçersizdir.
Süre Bazlı Yaklaşım
Olay bazlı temizleme kurmak zorsa, süre bazlı bir yapı da işe yarar:
- Her sayfa belirli bir süre saklanır.
- Süre dolunca yeniden üretilir.
- Kurulumu çok basittir.
- Güncelleme gecikmeli görünür.
Dördüncü madde kabul edilmesi gereken ödünleşimdir: bir saatlik önbellek süresi, yaptığınız değişikliğin bir saate kadar görünmemesi demektir.
Blog ve kurumsal siteler için bu genellikle kabul edilebilirdir. Fiyat değişen e-ticaret sitelerinde ise olay bazlı temizleme gerekir.
İki yaklaşım birleştirilebilir — süre bazlı çalışan bir önbellek, önemli değişikliklerde elle de temizlenebilir.
Hosting'de Kurulum
Paylaşımlı hostingde uygulanabilir seçenekler:
- Uygulama seviyesi önbellek eklentisi. En yaygın.
- Statik dosya üretimi. En hızlı sonuç.
- Kontrol panelindeki önbellek özelliği. Varsa kullanın.
İkinci seçenek en yüksek performansı verir: önbelleklenen sayfa gerçek bir HTML dosyası olarak diske yazılırsa, web sunucusu onu PHP'yi hiç başlatmadan sunar.
Bu, PHP'nin devreye girdiği eklenti tabanlı çözümlerden belirgin şekilde hızlıdır. Yönlendirme kuralıyla, dosya varsa doğrudan sunulur, yoksa uygulamaya gidilir.
Bu kuralları dizin yapılandırma dosyasıyla tanımlayabildiğiniz Linux hosting paketleri bu yöntemi destekler.
Disk ve Dosya Sayısı
Sayfa önbelleği disk tüketir ve sınırlarınızı zorlayabilir:
- Her sayfa varyantı ayrı dosyadır.
- Mobil ve masaüstü ayrı saklanabilir.
- Sayfalama her sayfa için dosya üretir.
- Filtre kombinasyonları hızla çoğalır.
Dördüncü madde kontrolsüz büyümenin kaynağıdır: filtreli liste sayfalarını önbelleklemek, binlerce farklı dosya üretebilir ve dosya sayısı kotanızı tüketir.
Çözüm, önbelleklenecek adresleri sınırlamaktır — parametre içeren adresleri kapsam dışı bırakmak, hem disk hem karmaşıklık açısından doğru tercihtir.
Sonuç
Tam sayfa önbelleği, paylaşımlı hostingde alabileceğiniz en büyük hız kazancıdır — önbellekten sunulan bir sayfa statik dosya kadar hızlıdır çünkü fiilen statik bir dosyadır. Kurulumun ilk ve en kritik kuralı, giriş yapmış kullanıcıların sayfalarını asla önbelleğe almamaktır; aksi hâlde bir ziyaretçi başkasının bilgilerini görebilir. Sayfanın küçük bir kısmı kişiselse tümünü dinamik tutmayın, o parçayı istemci tarafında doldurun. Ve filtreli adresleri önbellek kapsamı dışında bırakın — dosya sayınızı tüketirler.
Sıkça Sorulan Sorular (SSS)
Sayfa önbelleği güvenlik riski taşır mı?
Yanlış yapılandırılırsa evet ve ciddi bir risktir. Giriş yapmış bir kullanıcının sayfası önbelleğe alınırsa, bir sonraki ziyaretçiye o sayfa sunulabilir. Oturum çerezi taşıyan isteklerin önbelleği tamamen atladığını mutlaka doğrulayın.
Sepet sayısı gibi kişisel öğeler ne olacak?
Tüm sayfayı dinamik tutmayın — çok küçük bir ihtiyaç için çok büyük bir maliyet olur. Sayfayı önbellekleyip o parçayı boş bırakın ve küçük bir betikle ayrı bir istekten doldurun. Sunucu yükü büyük ölçüde düşer.
İçeriği güncelledim ama eski hâli görünüyor?
Önbellek temizlenmemiş demektir. Bir yazıyı güncellediğinizde yalnızca o sayfayı değil, o yazının başlığının göründüğü ana sayfa ve kategori listelerini de temizlemeniz gerekir. Süre bazlı bir yapı kullanıyorsanız, süre dolana kadar eski hâli görünür.
Önbellek disk kotamı doldurur mu?
Filtreli adresleri kapsama alırsanız evet — filtre kombinasyonları binlerce dosya üretebilir ve dosya sayısı kotanızı tüketir. Parametre içeren adresleri önbellek kapsamı dışında bırakmak hem disk hem karmaşıklık açısından doğru tercihtir.