Merhaba arkadaşlar, bugün sizlere özellikle WordPress, forum yazılımları veya özel uygulamalarınızda, kullanıcıya özel alanlar (giriş yapmış kullanıcı adı, sepet bilgisi) ile genel içeriği aynı sayfada barındırırken, önbellekleme verimliliğini nasıl uçurabileceğimizi anlatacağım. ESI (Edge Side Includes) sayesinde, sayfanın statik kısımlarını süper hızlı önbelleklerken, dinamik küçük parçaları ayrıca işleyebilirsiniz. Benim sunucularda yoğun dinamik içerikli projelerde sıklıkla başvurduğum bir yöntem.
ESI Nedir ve Neden Önemli?
Geleneksel önbelleklemede, sayfada tek bir dinamik parça olsa bile (örneğin "Hoş geldin, Ahmet" yazısı), tüm sayfa önbelleğe alınamaz ve her kullanıcı için yeniden oluşturulur. Bu, CPU ve veritabanı yükünü artırır. ESI ise sayfayı "parçalara" ayırmanıza izin verir. LiteSpeed Web Server, sayfanın ana gövdesini önbellekler, ancak <!--esi ... --> etiketi ile işaretlenmiş alanları, kullanıcıya özel olarak ayrıca işler ve birleştirir. Böylece hem önbellek oranınız %99'lara çıkar, hem de kişiselleştirilmiş içerik sunabilirsiniz.
LiteSpeed'de ESI'yi Etkinleştirme
Öncelikle LiteSpeed Web Server (LSWS) veya OpenLiteSpeed kullanıyor olmanız gerekiyor. ESI desteği varsayılan olarak kapalı gelebilir. Etkinleştirmek için aşağıdaki adımları izleyin.
İlk olarak, LiteSpeed Yönetici Paneline (WebAdmin Console) giriş yapın. "Configuration" > "Server" > "General" sekmesine gidin. "Enable ESI" seçeneğini bulun ve "Evet" olarak işaretleyin. Değişikliği kaydedip LSWS'yi yeniden başlatın.
Eğer .htaccess üzerinden kontrol etmek isterseniz, aşağıdaki satırı ekleyebilirsiniz:
Ancak ESI'yi tam anlamıyla kullanmak için uygulama tarafında da desteğin açık olması gerekir. Örneğin, WordPress için LS Cache eklentisinde ESI seçeneğini açmalısınız.
Uygulama Tarafında ESI Etiketleri Oluşturma
ESI, basit XML benzeri etiketlerle çalışır. Uygulamanızın çıktısına bu etiketleri yerleştirirsiniz. LiteSpeed, bu etiketleri görünce ilgili parçayı ayrıca işler. İşte temel örnekler:
Bu örnekte, ilk parça çerezden `user_id` değerini alarak dinamik bir içerik getirecek, ikincisi ise doğrudan bir URL'den sepeti getirecek. Ana sayfa tamamen önbelleklenirken, sadece bu iki küçük alan her kullanıcı için ayrıca render edilecek.
Dikkat Edilmesi Gerekenler ve Optimizasyon İpuçları
Burada şu ayara çok dikkat etmelisiniz: ESI parçalarının kendi önbellek kontrolleri. Eğer ESI ile çağırdığınız alt istek de çok sık değişmiyorsa, onu da ayrıca önbelleklemelisiniz. Aksi takdirde her kullanıcı için ayrı ayrı veritabanı sorgusu yapmaya devam edersiniz.
/etc/httpd/conf/httpd.conf veya sanal host konfigürasyonunuzda ESI parçaları için önbellek politikası belirleyebilirsiniz. Ayrıca, ESI'yi sadece gerçekten ihtiyaç duyulan bölümlerde kullanın. Her şeyi ESI yapmak, performansı düşürebilir çünkü çok fazla alt istek oluşur.
Benim sunucularda genelde kullandığım yöntem, ana sayfa, yazı içerikleri gibi ağır kısımları tam cache'lemek, sadece navbar'daki kullanıcı menüsü ve belki mini sepet widget'ını ESI ile işlemek. Bu mükemmel bir denge sağlıyor.
Test ve Son Kontroller
Kurulumdan sonra mutlaka test edin. Sayfanızın kaynağını görüntüleyin ve ESI etiketlerinin doğru yerleştirilip yerleştirilmediğine bakın. LiteSpeed yönetici panelindeki önbellek istatistiklerinizi kontrol edin. "Cache Hit Rate" değerinizin önemli ölçüde arttığını görmelisiniz. Ayrıca, sayfa yükleme sürelerinizi (örneğin GTmetrix ile) ESI öncesi ve sonrası karşılaştırın.
Sonuç olarak, ESI, LiteSpeed'in en güçlü özelliklerinden biridir ve dinamik içerikle statik hızı bir arada sunmanın adeta sihirli anahtarıdır. Doğru yapılandırıldığında sunucu yükünüzü inanılmaz derecede hafifletir, kullanıcı deneyimini ise zirveye taşır.
Siz bu konfigürasyonu kendi sunucularınızda nasıl yapıyorsunuz? Özellikle WordPress dışındaki (Laravel, Node.js entegrasyonu gibi) özel projelerinizde ESI'yi kullandınız mı? Tecrübelerinizi paylaşın, soruları olan arkadaşlar aşağıya yazsın, beraber çözelim.
Geleneksel önbelleklemede, sayfada tek bir dinamik parça olsa bile (örneğin "Hoş geldin, Ahmet" yazısı), tüm sayfa önbelleğe alınamaz ve her kullanıcı için yeniden oluşturulur. Bu, CPU ve veritabanı yükünü artırır. ESI ise sayfayı "parçalara" ayırmanıza izin verir. LiteSpeed Web Server, sayfanın ana gövdesini önbellekler, ancak <!--esi ... --> etiketi ile işaretlenmiş alanları, kullanıcıya özel olarak ayrıca işler ve birleştirir. Böylece hem önbellek oranınız %99'lara çıkar, hem de kişiselleştirilmiş içerik sunabilirsiniz.
Öncelikle LiteSpeed Web Server (LSWS) veya OpenLiteSpeed kullanıyor olmanız gerekiyor. ESI desteği varsayılan olarak kapalı gelebilir. Etkinleştirmek için aşağıdaki adımları izleyin.
İlk olarak, LiteSpeed Yönetici Paneline (WebAdmin Console) giriş yapın. "Configuration" > "Server" > "General" sekmesine gidin. "Enable ESI" seçeneğini bulun ve "Evet" olarak işaretleyin. Değişikliği kaydedip LSWS'yi yeniden başlatın.
Eğer .htaccess üzerinden kontrol etmek isterseniz, aşağıdaki satırı ekleyebilirsiniz:
Kod:
<IfModule LiteSpeed>
CacheEnable public
CacheLookup public on
RewriteEngine On
RewriteRule . - [E=Cache-Control:max-age=3600]
</IfModule>
Ancak ESI'yi tam anlamıyla kullanmak için uygulama tarafında da desteğin açık olması gerekir. Örneğin, WordPress için LS Cache eklentisinde ESI seçeneğini açmalısınız.
ESI, basit XML benzeri etiketlerle çalışır. Uygulamanızın çıktısına bu etiketleri yerleştirirsiniz. LiteSpeed, bu etiketleri görünce ilgili parçayı ayrıca işler. İşte temel örnekler:
XML:
<!--esi
<esi:include src="$(HTTP_COOKIE{user_id})" alt="https://orneksite.com/varsayilan-bilesen" />
-->
Kullanıcı Sepeti: <!--esi <esi:include src="https://orneksite.com/dinamik/sepet-getir" /> -->
Bu örnekte, ilk parça çerezden `user_id` değerini alarak dinamik bir içerik getirecek, ikincisi ise doğrudan bir URL'den sepeti getirecek. Ana sayfa tamamen önbelleklenirken, sadece bu iki küçük alan her kullanıcı için ayrıca render edilecek.
Burada şu ayara çok dikkat etmelisiniz: ESI parçalarının kendi önbellek kontrolleri. Eğer ESI ile çağırdığınız alt istek de çok sık değişmiyorsa, onu da ayrıca önbelleklemelisiniz. Aksi takdirde her kullanıcı için ayrı ayrı veritabanı sorgusu yapmaya devam edersiniz.
/etc/httpd/conf/httpd.conf veya sanal host konfigürasyonunuzda ESI parçaları için önbellek politikası belirleyebilirsiniz. Ayrıca, ESI'yi sadece gerçekten ihtiyaç duyulan bölümlerde kullanın. Her şeyi ESI yapmak, performansı düşürebilir çünkü çok fazla alt istek oluşur.
Benim sunucularda genelde kullandığım yöntem, ana sayfa, yazı içerikleri gibi ağır kısımları tam cache'lemek, sadece navbar'daki kullanıcı menüsü ve belki mini sepet widget'ını ESI ile işlemek. Bu mükemmel bir denge sağlıyor.
Kurulumdan sonra mutlaka test edin. Sayfanızın kaynağını görüntüleyin ve ESI etiketlerinin doğru yerleştirilip yerleştirilmediğine bakın. LiteSpeed yönetici panelindeki önbellek istatistiklerinizi kontrol edin. "Cache Hit Rate" değerinizin önemli ölçüde arttığını görmelisiniz. Ayrıca, sayfa yükleme sürelerinizi (örneğin GTmetrix ile) ESI öncesi ve sonrası karşılaştırın.
Sonuç olarak, ESI, LiteSpeed'in en güçlü özelliklerinden biridir ve dinamik içerikle statik hızı bir arada sunmanın adeta sihirli anahtarıdır. Doğru yapılandırıldığında sunucu yükünüzü inanılmaz derecede hafifletir, kullanıcı deneyimini ise zirveye taşır.
Siz bu konfigürasyonu kendi sunucularınızda nasıl yapıyorsunuz? Özellikle WordPress dışındaki (Laravel, Node.js entegrasyonu gibi) özel projelerinizde ESI'yi kullandınız mı? Tecrübelerinizi paylaşın, soruları olan arkadaşlar aşağıya yazsın, beraber çözelim.