Pages

Asp.net Cache işlemleri( Output Caching)

Web uygulamalarında performans önemlidir. Performansı artırmanın yollarından biride caching dir.Caching yani sayfayı önbellekte tutma işi belirli süre içinde kullanıcı sayfayı tekrar çağırmışsa html’in önbellekten yüklenmesidir.

<%@OutputCache Duration="300" Location="Any" VaryByParam="none" %>
burda Duration çnbellekte saklama süresini location ise sayfanın  nerede önbellekleneceğini verir.

Location nesnesinin alabileceği değerler şunlardır
Any :Önbellekleme, isteği yapan Client, Proxy Server yada isteğin yapıldığı server üzerinde olur.
Client:Önbellekleme, isteği yapan Client’ de olur.
DownStream:Önbellekleme, isteği yapan Client’de ve Proxy Server üzerinde olur.
None:Önbellekleme yapılmaz.
Server:Önbellekleme, isteğin yapıldığı Server üzerinde olur.
ServerAndClient:Önbellekleme, isteği yapan Client’de ya da isteğin yapıldığı Server üzerinde olur.

şimdi kodumuzu yazalım ve görelim 20 sn içinde gelen verilerin cache den olduğunu.

protected void Page_Load(object sender, EventArgs e)
        {
            Response.Write(DateTime.Now.ToString());
        }

Şimdi VarybayParam özelliği ise QueryString’den gelen değerlere göre önbellekleme işlemi yapar.Aşağıdaki kodumuza bakalım.

default.aspx e bu kodu

Response.Redirect("Default2.aspx?ad="+TextBox1.Text+"&soyad="+TextBox2.Text);

bu kodları default2.aspx dosyasına yazarsak göreceğiz ki

protected void Page_Load(object sender, EventArgs e)
        {
            string ad = Request.QueryString["ad"].ToString();
            string soyad = Request.QueryString["soyad"].ToString();

            Response.Write(ad+""+soyad);
        }

<%@ OutputCache Duration="40" Location="Any" VaryByParam="ad" %>

ad alanı değiştirsekte soyad alanına yazacağımız yazılar 40 saniye boyunca değişmeyecek.

Şimdi Fragment Caching yani sayfanın belli bir ksımının ön belleklenmesine bakalım.

hemen Ascx uzantılı yeni sayfamızı oluşturalım.(user control) ve şu kodu yazalım

<%@ OutputCache Duration="10" VaryByParam="none" %>


protected void Page_Load(object sender, EventArgs e)
        {
            Label1.Text = DateTime.Now.ToString();
        }

göreceğiz ki sayfada diğer kontroller refresh ile değişirken bu label in text i sadece 10 saniyede bir değişecek.

Dikkat :UserControl nerelerde kullanılmışsa kullanıldığı her yer için ayrı ayrı çıktısı bellekte saklanır. Shared özelliğini True yaparak, tüm sayfalar için tek bir çıktı bellekte saklanır.

<%@ OutputCache Duration="10"Location="Any" VaryByParam="none"Shared="true”%>

şimdi sayfamızda herhangi bir kotrolün değişimine göre cachleme yapalım. Örneğin dropdownlist ekleyelim ve bunun seçili olan index ine göre önbellekleme yapalım.Önce bu kodu sayfamıza ekleyelim.

<%@ OutputCache Duration="40" Location="Any" VaryByControl="DropDownList1"  Shared="true"%>

Dikkat: Burda DropdownList i mizde AutoPostBack özelliği true yapılmalı ki sayfa yenilendiğinde default öğe seçili olarak gelmesin.

Hemen arkasından sayfayı çalıştırdığımızda ve dropdownlistte bir şeyi seçince sayfanın yeniden cache len diğini görüyoruz. eğer seçili öğeyi değiştirmeden refresh yaparsak 40 sn boyunca aynı veri sayfada görüntülenir. fakat değiştirdiğimiz anda o anki veri görüntülenir ve cache o alınır.

Substitution Caching:
Şimdi Cachleme olayını yaparken tam ters işlemleri yapalım. Mesela sayfa tümüyle cachelenirken sadece bşr bölümü sürekli yenilensin. işte bu işleme Substitution Caching denir.

önce bu kodları oluşturalım. sonra çalıştırdığımızda sayfa refresh edilince sadece tarih alanlarının birini her refreshte değiştiğini görelim diğeri ise sayfanın cache de kalma süresi bittiğinde değişir.
<%@ OutputCache Duration="10" Location="Any" VaryByParam="none" %>

protected void Page_Load(object sender, EventArgs e)
        {
            Response.Write(DateTime.Now.ToString());
        }
        public static string DanDun(HttpContext daaan)
        { 
          return DateTime.Now.ToString();
        }

burda dikkat etmemiz gereken kısım: HttpContext sınıfı türünde veri alan ve geriye string döndüren fonksiyon olmalıdır.Çünkü Önbellekleme yapılmış bir sayfa içinde dinamik alan oluşturabilmek için HTML içinde Substitution kontrolünü yada HttpResponse sınıfının WriteSubSubstitution metodunu kullkullanıcaz.

<asp:Substitution ID="Substitution1" runat="server" MethodName="DanDun"/>
yada
<%Response.WriteSubstitution(new HttpResponseSubstitutionCallback(DanDun)); %>

Hiç yorum yok: