Koray Kırdinli

Yazılım ve İş Yaşamı Hakkında Paylaşımlar

ASP.NET Önbellekleme II (Page Output Caching)

Bir web browser bir sayfayı getirdiğinde browser sayfanın bir kopyasını local bilgisayarda saklar. Tekrar aynı sayfaya istekte bulunulduğunda browser cache’lenmiş versiyonun valid olup olmadığını kontrol eder ve valid ise kullanıcıya sayfayı gösterir. Bu yöntem ile hem sayfanın kullanıcı tarafafında daha hızlı dolması sağlanır hem de server’a tekrardan istek gelmediği için sayfa tekrardan render edilmek zorunda kalmaz.Client-Side cache sayesinde eğer 1 kullanıcı sayfayı 100 kez çağırdığında sayfa 100 kez üretilir , fakat 100 farklı kullanıcı 1er kez sayfayı çağırırlarsa sayfa 100 kez üretilir.
Performansı artırmak için page rendering’i minimuma indirmemiz gerekiyor. Asp.net page output caching ile serverın belleğinde render edilmiş sayfayı saklayarak performansı ciddi oranda artırabiliriz.
Eğer sayfalarımızda kullanıcı bazlı dinamik veriler gösteriyorsak serdaki cache’de render edilen sayfayı bütün kullanıcılara göstermek olmaz bu yüzden ASP.NET’de partial – page – caching bulunmaktadır
ASP.NET ile her bir sayfayı ayrı ayrı cache’leyebilmek her sayfada bulunan @ OutputCache sayfa direktifi ile mümkündür. Bu direktifin yanına vereceğimiz parametreler ile çok çeşitli cacheleme teknikleri uygulayabiliriz.

Alıntı– CacheProfile: web.config içerisinde tanımlı olan Cache profillerinden birinin sayfaya uygulanılması istenilen durumda kullanılan niteliktir.
– DiskCacheable: Verilerin disk ve benzeri bir depolama cihazına alınıp alınamayacağını belirler.
– Duration: Önbelleğe alınacak sayfanın ne kadar süre ile bellekten okunacağını belirler. Saniye cinsinden rakamsal değer almaktadır.
– Location: Önbelleklenen verilerin nereye kaydedileceğini belirler. Varsayılan olarak Any değerini taşır. Bu değer verilerin istemci, proxy ve sunucuda taşınabildiğini belirtir. İstenirse sadece sunucuda, istemcide veya proxy’de saklanması sağlanabilir. Alabileceği diğer değerler; Client, Server, Downstream, ServerAndClient ve None’dir.
– NoStore: Sayfanın header (başlık) bilgilerinde “no cache” bilgisinin gönderilip gönderilmeyeceğini belirler.
– SqlDependency: Sayfanın SQL Server veritabanındaki bir tablonun değişimine bağımlı olarak önbelleklenmesi durumunda kullanılacak niteliktir. Bu özelliğe değer atayabilmek için, web.config dosyasındaki caching düğümünde bulunan sqlCacheDependency içerisine bir veritabanı tanımlaması yapılmalıdır.
– VaryByControl: Sayfadaki bir kontrolün değişimine göre önbellekleme işleminin yapılmasını sağlar. Değer olarak önbellekleme işleminin yapılmasını sağlayacak kontrolün ID değerini almalıdır.
– VaryByCustom: Farklı değerlere ve kriterlere göre önbellekleme işlemlerinin yapılması durumunda kullanılacak niteliktir. Bu niteliğin alacağı değerin yakalanıp ele alınabilmesi için Global.asax dosyası içerisindeki GetVaryByCustomString isimli metodun ezilmesi (override edilmesi) gerekmektedir.
– VaryByHeader: Sayfanın HTML kısmında yer alan header (başlık) bilgilerine göre önbellekleme işlemlerinin yapılmasını sağlar.
– VaryByParam: Sayfanın Url’den gelen QueryString parametrelerine göre önbelleğe alınıp alınmayacağını belirler. Varsayılan değeri None’dir ve parametreleri dikkate almaksızın sayfanın belleğe alınmasını sağlar. QueryString’deki herhangi bir parametrenin adını alarakta bu değere göre sayfanın farklı kopyalarının önbellekleğe alınabilmesini sağlar. Bu niteliğin her OutputCache direktifi içerisinde yazılması zorunludur.

Aşağıdaki örnek direktif ile query string’den gelen değer search veya category ise 15 sn cache’lenmesi sağlar eğer VarByPAram boş olsaydı hiç bir kritere bakmadan direk cache’leme yapacaktı.
<%@ OutputCache Duration="15" VaryByParam="search;category" %>

Aşağıda bir kontrole göre cacheleme yapılmıştır. Kontrollerin HTML isimlerine göre yapılıyor.
<select name=”ctl00$MainContent$ChoiceDropDownList” id=”MainContent_ChoiceDropDownList”>
<option value=”One”>One</option>
<option value=”Two”>Two</option>
<option value=”Three”>Three</option>
</select>
<input name=”ctl00$MainContent$UserNameTextBox” type=”text” id=”MainContent_UserNameTextBox” />

<%@ OutputCache Duration=”15″  VaryByParam=”ctl00$MainContent$ChoiceDropDownList;ctl00$MainContent$UserNameTextBox”%>

 

Partial-Page Caching : Bu cache’leme yöntemimiz ile cache’lemek istediğimiz sayfanın parçasını bir user control’e atıyoruz ve daha sonra user controlün @ OutputCache direktifine nasıl cache’leme yapmak istiyorsak ekliyoruz ve böylece bir sayfada birbirinden bağımsız user controlleri cache’leyebiliyoruz.

November 29, 2011 - Posted by | ASP.NET | , , , , , ,

No comments yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s