jekcms tek bir genel amaçlı dosya önbelleği kullanır; performans için asıl önemli olan katman sayfa önbelleğidir -- ayrı bir sorgu önbelleği katmanı, CACHE_DRIVER ayarı yoktur. Nasıl çalıştığı, TTL'in nasıl yapılandırılacağı ve nasıl temizleneceği.
jekcms'in önbellekleme yaklaşımı birçok büyük CMS platformundan daha basittir: dosya sistemine dayanan tek bir genel amaçlı Cache sınıfı (native/includes/Cache.php) vardır ve bunun üzerine kurulu, günlük performans için önem taşıyan tek katman — sayfa önbelleği — bulunur.
Sayfa Önbelleği: Önemli Olan Katman
PAGE_CACHE_ENABLED true olduğunda (production'da varsayılan), bir isteğin tam HTML yanıtı istek URI'sine göre anahtarlanmış bir önbellek dosyasına yazılır. Aynı URL için sonraki istekler doğrudan bu dosyadan sunulur, PHP'yi ve veritabanını tamamen atlar. Admin sayfaları, POST istekleri ve giriş yapmış kullanıcılardan gelen istekler sayfa önbelleğini otomatik olarak atlar — bir girişin arkasında hiçbir zaman önbelleğe alınmış içerik görmezsiniz.
Ayrı Bir Sorgu Önbelleği Katmanı Yoktur
Bazı CMS platformları sayfa önbelleğinin üzerine kendi TTL'i, kendi dosya adlandırması, kendi ayarları olan ayrı bir sorgu-sonucu önbelleği ekler. jekcms eklemez. Tek bir önbellek mekanizması vardır ve veritabanı sorgularınızın önünde duran şey sayfa önbelleğidir: bir sayfa önbelleğe alındığında, onu oluşturan sorgular önbellek girdisi süresi dolana ya da temizlenene kadar tekrar çalıştırılmaz. Belirli, pahalı bir sorgunun sonucunu kendiniz, tam sayfa önbelleklemenin dışında, önbelleğe almanız gerekiyorsa, kendi tema ya da eklenti kodunuz içinde aynı Cache sınıfını doğrudan kullanabilirsiniz (get(), set(), remember()), ama jekcms kutudan çıktığı haliyle ayrı yapılandırılmış özel bir sorgu önbelleği katmanı içermez.
Yapılandırma
Sayfa önbelleği davranışı config/config.php içinde yaşar:
define('CACHE_ENABLED', true);
define('CACHE_LIFETIME', 3600); // genel önbellek için varsayılan TTL
define('PAGE_CACHE_ENABLED', IS_PRODUCTION);
define('PAGE_CACHE_LIFETIME', 300); // 5 dakika
Varsayılan 300 saniyelik sayfa önbelleği TTL'i çoğu site için iyi çalışır. Sık yayın yapan siteler bunu düşürmeli; içeriği nadiren güncellenen siteler sunucu yükünü azaltmak için güvenle yükseltebilir.
Önbelleği Temizleme
Önbellek geçersizleştirme, admin panelinden gönderi kaydetme, güncelleme ve silmede otomatik gerçekleşir. Manuel olarak zorlamanız gerekiyorsa — örneğin toplu bir veritabanı işleminin ardından — bir PHP betiğinden cache()->flush() çağırın; parametre almaz ve tüm dosya önbelleğini tek çağrıda temizler. Admin panelindeki önbellek temizleme eylemi de aynısını yapar.
Önbellek Sorunlarını Giderme
- Admin değişiklikleri ön yüzde görünmüyor: sayfa önbelleği eski bir yanıt sunuyor. Admin panelinden önbelleği temizleyin ya da TTL'nin dolmasını bekleyin.
- Doğrudan SQL değişiklikleri yansımıyor: jekcms'in normal kaydetme yolunun dışında veri güncellerseniz (veritabanına doğrudan SQL), bu değişiklikten önce önbelleğe alınmış herhangi bir sayfa, süresi dolana ya da elle temizleyene kadar eski içeriği sunmaya devam eder.
- Giriş yapmış kullanıcılar önbelleğe alınmış içerik görüyor: bu asla olmamalı — sayfa önbelleği aktif oturumu olan istekleri açıkça atlar. Görürseniz, kimliği doğrulanmış bir istek içinden sayfa-önbelleği yazma yoluna dokunan bir şey olup olmadığını kontrol edin.
Akıl yürütülecek tek bir önbellek mekanizması olduğu için hata ayıklama basit kalır: bir şey eski görünüyorsa bu neredeyse her zaman sayfa önbelleğidir ve tek bir önbellek temizleme eylemi bunu çözer.