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: ,

Software | Web | Articles

Yorum ekle


(Gravatar simgesini gösterecek)  

  Country flag

biuquote
  • Yorum
  • Canlı önizleme
Loading





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

Şifahen değil acilen!

Anket

Yazılım geliştirirken en keyif aldığınız alan hangisi?




Sonuçlar

Son Yorumlar

Comment RSS

Calendar

<<  Ocak 2009  >>
PaSaÇaPeCuCuPa
2930311234
567891011
12131415161718
19202122232425
2627282930311
2345678

Yazıları geniş takvimde göster

Ne Dinliyorum?

Kirpi - TearDrop (8 saat önce)
Kirpi - My Name Is Kirpi (8 saat önce)
Kirpi - The Song (8 saat önce)
Kirpi - Spell (8 saat önce)
Huseyin Karadayi - Bonus Track Funk Clarinet (String Mix) (8 saat önce)
Huseyin Karadayi - Sacred Gate (8 saat önce)
Huseyin Karadayi - Exotica (8 saat önce)
Huseyin Karadayi - Take Me Away / No Time To Waste (Vocal By Melis Sökmen) (8 saat önce)
Huseyin Karadayi - Eyes Don't Lie (Duet By Enoi & Funky C) (9 saat önce)
Huseyin Karadayi - This Way (Usy Groove) (9 saat önce)

Ne Okuyorum?


Haftanın Sözü


"Sukûnetim asaletimdendir;
Lâkin her lâfa verilecek bir cevabım var.
Bir bakarım lâf lâfmı diye,
Birde bakarım söyleyen adammı diye.."

Mevlânâ Celaleddin-i Belhi Rumi
(1207-1273)

Adanmış Hayatlar

"Zaten aşklar hep yalan dolan,
Sonu hep acı hüsran.
Bize her sevdadan geriye kalan
Sadece Galatasaray..
"

Son Dakika

İstanbul'da Hava

ISTANBUL

Ziyaretçi Sayısı

Ziyaretçi Sayısı