Kullanıcı taraflı önbellek sorunları

Yağız Gönüler tarafından yayınlanmıştır 13. Ağustos 2008 13:42

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.

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

# Ajax.Asp.Net

Bu yazıyı ilk değerlendiren siz olun

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Etiketler: ,

Yazılım Geliştirme | Web | Makaleler



Bu site BlogEngine.NET 1.4.5.0 ile oluşturulmuştur. Türkçe çevirisi BlogEngine TR ekibi tarafından yapılmıştır.
Sitedeki kod ve tasarım değişiklikleri ise Yağız Gönüler tarafından geliştirilmiştir.
2008 © www.yagizgonuler.com

Paslaş

       

Anket

Mesleğinizden arta kalan zamanınızı nelere harcıyorsunuz?







Sonuçlar

Calendar

<<  Şubat 2012  >>
PaSaÇaPeCuCuPa
303112345
6789101112
13141516171819
20212223242526
2728291234
567891011

Yazıları geniş takvimde göster

Ne(ler) Okuyorum?


Ne Dinliyorum?

Bob Marley & The Wailers - Lively Up Yourself (3 saat önce)
Bob Marley & The Wailers - Jamming (3 saat önce)
Bob Marley & The Wailers - Is This Love (3 saat önce)
Bob Marley & The Wailers - Iron Lion Zion (3 saat önce)
Bob Marley & The Wailers - I Shot The Sheriff (3 saat önce)
Bob Marley & The Wailers - Get up,stand up (3 saat önce)
Bob Marley & The Wailers - Exodus (3 saat önce)
Bob Marley & The Wailers - Could You Be Loved (3 saat önce)
Bob Marley & The Wailers - Buffalo Soldier (3 saat önce)
Bob Marley & The Wailers - Africa Unite (3 saat önce)

İstanbul'da Hava

ISTANBUL

Ziyaretçi Sayısı