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) |
Ş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) 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" %> |
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.
<%@ OutputCache Duration="10" Location="Any" VaryByParam="none" %> |
protected void Page_Load(object sender, EventArgs e) |
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:
Yorum Gönder