Yazılımcının Günlüğü | YazilimGunlugu.Com
Arama
Makale Kategorileri
Üye Girişi
Şuanki online üyeler()
Aktif üye bulunmamaktadır.


Kullanıcı taraflı önbellek sorunları

Yazar: Yağız Gönüler

Kategori: ASP.NET

Eklenme Tarihi: 17.12.2007 11:26:54

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.

// xmlhttp adında bir değişken tanımlıyoruz. Daha sonra;

//bu değişkeni msxml2.xmlhttp active x objesi olarak tanımlamaya çalışıyoruz

//eğer başarılı değilse hatayı try catch metoduyla yakalıyoruz

//başarılı değilse Microsoft.xmlhttp active x objesini belirtip değerini alıyoruz


<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;


}


//bu fonksiyon xmlhttp objesinin talebinin onaylanıp onaylanmadığını
//kontrol ediyor. Onaylanırsa adrese rastgele atamasını yapıyor

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:


// daha önce yaptığımzı gibi xmlhttp adında bir değişken tanımlıyoruz.
// Daha sonra;

// bu değişkeni msxml2.xmlhttp active x objesi olarak tanımlamaya çalışıyoruz

// eğer başarılı değilse hatayı try catch metoduyla yakalıyoruz

// başarılı değilse Microsoft.xmlhttp active x objesini belirtip değerini alıyoruz

<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;


// bu fonksiyonun diğer fonksiyondan farkları var
// readystate?in 4 yani talep onaylanması işleminden sonra
// objenin önbellekten silinmesi gereken tarihi belirtmemiz gerekiyor

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

Yazar Hakkında Yorum Yok Yorum Yaz Yazara ait diğer Makaleler
Tema
Anket
ASP.NET MVC'yi Projeleriniz de kullandınız mı?


En Çok Okunan Makaleler
En Son Eklenen Makaleler
Soru Merkezinde Bekleyenler
Ana Sayfa | Hakkımızda | Editörler | Yazarlar | RSS RSS | İletişim
Yazılım Günlüğü 2007-2009 © Tüm Hakları Saklıdır.