Bildiğiniz üzere browser cache’leri web mimarilerini hızlandırmak için kullanılır. Fakat bu durum yazılım geliştiriciler için bir süre sonra çileden çıkarıcı bir durum olabilir. Özellikle tarayıcıda en son sürümü görüntülenecek dinamik bir içerikle uğraşırken. Bununla birlikte, güvenlik sebebiyle, javascript içinde tüm tarayıcılar için önbelleğe almayı devre dışı bırakabilecek mükemmel yöntemler yoktur. Bu yazıda, javascript’in ve jQuery’nin tarayıcılar tarafından önbelleğe almasını (cache) durdurmak veya devre dışı bırakmak için kullandığım birkaç yöntemi göstereceğim.
jQuery
jQuery v1.2’nin sonraki sürümünde, jQuery ajax sınıfıyla tarayıcı ile önbelleğe almayı durdurmak için bir yöntem sunulmuştur. V1.2’deki güncelleme listesini görmek için jQuery web sitesini ziyaret edebilirsiniz. v1.2 dökümantasyonlarda önbelleğe almayı devre dışı bırakacak bir fonksiyon içerdiğini göreceksiniz. Her bir dinamik içeriğin önbellekte saklanma şeklini true / false olarak ayarlayarak tüm tarayıcı cache’ini devre dışı bırakmak üzere bir varsayılan ayar görebilirsiniz.
Her bir ajax istek önbellek özelliklerini belirlemek için,
1 2 3 4 5 6 7 | $.ajax({ url: 'index.html', cache: false, success: function(html){ $('#results').append(html); } }); |
jQuery örneğini yansıtmaktadır. Ve tarayıcıyı kullanarak cache’i devre dışı bırakmak için aşağıdaki fonksiyonu kullanabiliriz:
1 | $.ajaxSetup({cache: false}}); |
Javascript
Tarayıcıların belirli bir dosyayı önbelleğe alabilmelerinin nedeni, tarayıcıya geçirilen url’lerin aynı olması nedeniyledir. Her geçerlilik için onu benzersiz kılmak için, aşağıda gösterildiği gibi url’nin sonuna rasgele bir sayı ekleyebiliriz,
1 2 3 4 5 | var img.src = 'www.fatihsoysal.com'+'?'+Math.random()*Math.random(); return $(img).load(function() { alert('completed!'); }); |
Bu yöntem, tüm dosyaların, tarayıcıya attığınız her dinamik geçiş için benzersiz olmasını sağlar; tarayıcının her seferinde güncel dosyayı çekmesine olanak sağlayacaktır. Bu yöntemi tarayıcının neredeyse tamamının dinamik içeriği alma şeklini destekleyeceği için daha güvenilir ve kullanışlı buluyorum.
Bonus: HTML
Aşağıdaki meta etiketi kullanarak önbelleklemeyi de devre dışı bırakabilir veya durdurabilirsiniz,
1 2 3 | <meta http-equiv='cache-control' content='no-cache'> <meta http-equiv='expires' content='0'> <meta http-equiv='pragma' content='no-cache'> |
Bu yöntem, tüm sayfanın tarayıcı tarafından da önbelleğe alınmasını önleyecektir.
Bir sonraki makalede görüşmek üzere, sağlıkla, huzurla kalın.
Yine soysal farkı. Güzel olmuş abi yazı. Yeni yazılarını bekliyorum.
Teşekkürler. Çok faydalı bir paylaşım olmuş.