Makale Özeti

Web Geliştiricileri gerek Ajax’tan önce gerekse Ajax’dan sonra önbellekle alakalı birçok sorun yaşamıştır. Ben bu makalemde Ajax ile birlikte gelen önbellek sorunlarına 2 alternatif çözüm göstereceğim.

Makale

Kullanıcı taraflı önbellek sorunları

 

Web Geliştiricileri gerek Ajax’tan önce gerekse Ajax’dan sonra önbellekle alakalı birçok sorun yaşamıştır. Ben bu makalemde Ajax ile birlikte gelen önbellek sorunlarına 2 alternatif çözüm göstereceğim.

 

Ajax ile sunucu tarafında birden fazla XMLHttpRequest işlemi yapıldığında, tarayıcımız bazı işlemlerin sürekli aynı adreste yapılmasından ötürü önbellekleme yapabilir. Böyle bir durumda örneğin bir haber sitesini düşünelim. Her gün hatta her saat güncellenen bir sitedir neticede haber siteleri. Ancak önbellekleme sorununu yaşıyorsak biz bu güncellemelerden haberdar olamayız. Haber sitesinin ilgili sayfasını her açtığımızda aynı haberlerle karşılaşırız.

 

Bu ve buna benzer önbellekleme sorunlarını çözmek için çeşitli yollar var. Bunlardan birincisi, veri isteğinde bulunduğumuz web adresinin sonuna sürekli değişen bir parametre atmak. Böylece adres her seferinde farklı gözükecektir ve kullanıcı tarafındaki (web browser) önbellekleme bizleri etkilemeyecektir.

 

Aşağıdaki kodları ajaxbellek.htm şeklinde kaydedip inceleyebilirsiniz. Bu scripti kullanarak web adresinin sonuna parametre ekleyebilir ve önbellekleme sorununu aşabilirsiniz.

<script type="text/javascript" language="javascript">

function XMLHTTPObjesi()

{

var XMLHTTP = new ActiveXObject("Msxm12.XMLHTTP");

}

catch (hata)

{

try

{

XMLHTTP = new ActievXObject("Microsoft.XMLHTTP");

}

catch (hata)

{

if (typeof XMLHttpRequest != "undefined")

{

XMLHTTP = new XMLHttpRequest();

}

}

}


return XMLHTTP;


}

 

function Dinle()

{

if (Objem.readyState == 4 &&

Objem.status == 200)

{


alert(Objem.responseText);


}

}

 

var Objem = XMLHTTPObjesi()

Objem.open("GET", "metin.aspx?id=4&rastgele=" + Math.random());

Objem.onreadystatechange = Dinle;

Objem.send(null);


</script>

 

 

Diğer çözüme geçeyim. Bu çözüm tekniğinde karşı taraftan gelen veriyi çekerken, ne zaman önbellekten silinmesi gerektiğini belirterek yine önbellekleme sorunundan kurtulabiliriz. Geçmişteki bir zamanı, gelen veriye Header olarak atarsak, veri alındıktan sonra önbellek geçerlilik süresi geçeceği için, web browser tarafından önbelleklenmeyecektir.

 

Aşağıdaki kodları ajaxbellek2.htm olarak kaydederek inceleyelim:

 

<script type="text/javascript" language="javascript">


function XMLHTTPObjesi()

{

var XMLHTTP = null;

try

{

XMLHTTP = new ActiveXobject("Msxm12.XMLHTTP");

}

catch (hata)

{

try

{

XMLHTTP = new ActiveXObject("Microsoft.XMLHTTP");

}

catch (hata)

{

if (typeof XMLHttpRequest != "undefined")

{

XMLHTTP = new XMLHttpRequest();

}

}

}


return XMLHTTP;


function Dinle()

{

İf (Objem.readyState == 4 &&

Objem.status == 200)

{

alert(Objem.responseText);

}

}

 

var Objem = XMLHTTPObjesi()

Objem.open("GET", "metin.txt");

Objem.setrequestHeader("If-Modified-Since", "Sat, 3 Nov 1992 13:13:13 GMT");

Objem.onreadystatechange = Dinle;

Objem.send(null);


</script>

 

 

Yukarıdaki scriptleri projelerinize rahatlıkla entegre edebilirsiniz. Umarım önbellekleme sorununu bu şekilde giderebilirsiniz.


Farklı makalelerde tekrar görüşmek üzere.

 

 

Yağız GÖNÜLER

yagizgonuler@gmail.com


Kaynaklar:
# ASP.net AJAX – Daron Yöndem

# Ajax.Asp.Net

 

Ayrıca Bkz:
# XmlHttpRequest (XHR) Nedir? – Yağız Gönüler