ASP.NET Uygulamalarında Performans
Aug 03,2007 00:00 by dragon111

ASP.NET teknolojisinin ortaya çıkmasının üzerinden uzun bir zaman geçmesine rağmen,özellikle bu alanda kendini geliştirmiş bir çok kod geliştirici dahi performans konusunda sorun yaşayabiliyor. Peki bu sorunlar nereden kaynaklanıyor ? ASP.NET web sayfalarının performansını nasıl arttırabiliriz ? İşte bu makalede ASP.NET performasını arttıracak 9 yöntemden bahsedip yukarıdaki sorulara cevap arıyor olacağız.

Bahsedeceğimiz yöntemlere geçmeden önce performans konusunda kodlama,görsel, algoritma, tasarım vb kısımlarda dikkatli olduğunuzu varsayıyorum.

1) Page.IsPostBack Kullanımı

Web sayfalarımızda sayfamız ilk kez yükleneceği zaman sayfa düzenini oluşturmak veya modüllerimizin başlangıç durumlarını ayarlamak(initialization) üzere belirli adımlar izleriz.Bununla birlikte bu adımları her defasında baştan yapmak zorunda değiliz.Örneğin bir web servisinden statik haber başlıklarını çektiğimizi düşünelim.

if( !Page.IsPostBack )
{
    …
    DataSet ds = NewsDS();
    …
}

Veriler statik olduğu için sayfamız ilk kez yüklendiğinde haber başlıklarını almamız yeterlidir.Sayfa yüklendikten sonra aynı sayfaya PostBack yapıldığında aynı verileri yeniden yüklemeye gerek kalmayacaktır.

2) Saklı Yordamları Kullanmak (Stored Procedures)

SQL Server saklı yordamları hem windows uygulamalarında hem de web uygulamarında uygulama hızını gözle görülür bir biçimde arttırmaktadır. Saklı yordamlar sql ifadelerimizi derlenmiş bir biçimde tutmaktadır.Diğer taraftan uygulama içerisinde oluşturduğumuz sql sorguları SQL server tarafından bir derlenme aşamasından geçmektedir.Dolayısıyla sorgularımızı saklı yordamlar şeklinde tuttuğumuz taktirde derleme aşamasını by-pass etmiş oluyoruz.Bu da yaptığımız işlemin hızını önemli ölçüde arttırıyor.

3) ASP.NET Ön Bellekleme Yöntemi (Cache)

Ön bellek server’ın sıkça kullanılan ve değişmeyen verileri tuttuğu bir bölümdür.Böylece istemcilere daha hızlı veri dönüşü sağlanmaktadır.Bununla beraber kod geliştiriciler olarak hangi dataların ne zaman ve ne uzunlukla ön bellekte tutulacağına karar vermek zorundayız. Diğer taraftan dataları ön belleklerken dikkat etmemiz gereken bir kaç altın kural var.

 

  • Ön belleklenen dataların türü birbirinden çok değişken olmamalıdır
  • Ömrü kısa olan veriler ön belleklenmemelidir.Eğer ASP.NET ön belleklenmiş verileri sıkça güncellerse bu durumda bu yöntem faydadan çok zarar getirecektir.

 

Ön bellekleme implementasyonu ASP.NET Page yönergesi veya Response nesnesi ile kolayca yapılabilir.Bunun için aşağıdaki yöntemleri kullanabiliriz

Bu yönerge ile ASP.NET sayfayı belirlenen zaman içersinde yeniden yapılandıracaktır

Aynı yöntemi şu şekilde de çağırabiliriz.

Response.Cache.SetExpires(DateTime.Now.AddSeconds(90))

Örneğin bir çok ürün,ürün resimleri, kategorilerin bulunduğu bir sanal mağazayı düşünün.Çok değişik türden kategoriler ve bu kategorilerin altında yüzlerce ürün olduğunu varsayalım.Bu durumda kullanıcıların en çok ziyaret ettiği kategoriyi tespit edip bu kategoriyi ön belleğe almak mümkündür.



VaryByParam kısmına ön belleklemek istediğimiz Request i yerleştirip sayfamızı aşağıdaki şekilde çağırıyoruz.

http://www.siteniz.com/products.aspx?kategori=usbbellek

4) Session State’in Sınırlandırılması

Session kullanıcıların web sayfanızda interaktivitede bulunduğu süreçtir.Session State ise bu süreç boyunca içinde veri saklayabiliceğimiz bir konteyner görevi görmektedir. ASP.NET sayfalarında Session State default olarak açıktır.Fakat gereksiz bölümlerde bu modülü yetkisiz kılmak önemli bir performans artışı sağlayacaktır.Aksi halde büyük bir yükü sırtlanmış olacağız.

ASP.NET te aşağıdaki yöntemlerle sayfamızda Session State i yetkisiz (disable ) veya sadece okunabilir ( readonly ) bir hale getirebiliriz



Diğer taraftan konfigurasyon dosyamızdan sessionstate mode="off" / bölümünü modifiye ederek Session State i tüm sitemizde yetkisiz kılabiliriz.

Session state i uygulama dışında bir yerlerde saklamak işi biraz daha komplex bir hale getirsede performans açısından önemli artış sağlayabilir.Aşağıdaki örnekte Session State veritabanı üzerinde saklanmaktadır.

5) View State Kullanımı

Viewstate basit anlamda, herhangi bir ASP.NET sayfanızda postback'ler arasında kaybetmek istemediğiniz verileri saklamanıza yarayan bir araçtır.Server tabanlı kontroller default olarak view state i tutmaktadır.Sayfanızı görüntüleyip kaynak kodunu inceledeğinizde bu konunun üzerinde neden durduğumuz açıkça görebilirsiniz.Textbox lar veya diğer basit kontroller çok fazla yük getirmezken çok sayıda veriyi barındıran bir datagrid kontrolü 20K lık kodlanmış datanın Server dan Client a aktarılmasına sebebiyet verebilir.Yüksek hızlı networklerde bu veriler sıkıntı oluşturmazken 56K lık bir modemle bağlanan kullanıcı için siteniz önemli bir zaman kaybı oluşturabilir.

http://support.microsoft.com/kb/318131  adresinde ulaşabilirsiniz)

9) CSS Kullanımı (Cascading Style Sheets)

CSS web tarayıcısına yazılan verilerin nasıl görüneceğini belirlememize yarayan konfigurasyon dizelerinden ibarettir. CSS kullanımının performans ile nasıl bir ilişkisi olabilir ki?

Bir çok kod geliştirici sayfa stillerini HTML içerisine gömmekte veya sayfa içerisine dağıtmaktadır. Bu yöntem kod karmaşası, kod fazlalığı, tek kaynaktan yönetim vb. bir çok olumsuz zafiyete yol açmakla beraber sayfayı ziyaret eden kullanıcılar bu bilgileri sayfa ile birlikte lokaline yüklemektedir. Stiller sayfa ile birlikte tarayıcı tarafından yorumlanmaktadır. Bunun yerine stiller harici bir dosyada oluşturulup linklenmiş bir şekilde uygulamaya eklendiği zaman kullanıcılar sayfayı ziyaret ettiğinde bu dosya kullanıcı bilgisayarının ön belleğine yüklenmekte ve lokal kaynaklardan çalışmaktadır. Böylece aynı web uygulamasına ait sayfaları ziyaret eden kullanıcıya ait web tarayıcısı sayfa stilleri için ön belleğine yüklenmiş stil dosyasını kullanmakta ve performans kazancı elde etmektedir.

10) Projenin Derlenmesi

Web sitemiz üzerinde çalışırken her bir sayfa değişiminde uygulamayı yeniden debug eder ve test ederiz.Debug işlemi uygulamayı bir takım testlerden(syntax vb.) geçirdiğinden extra bir zaman ve performans gerektirir.Fakat uygulamamız son halini aldığı zaman uygulamanın yayımlanması(publish) ve debug modunun yetkisiz(disable) yapılması az önce bahsettiğimiz extra işlemlerden muaf olmamızı sağlayacaktır.Bunun için web.config dosyamızda aşağıdaki değişikliği yapmamız yeterlidir.

Sonuç olarak performans kavramının çok geniş bir yelpazeyi kapsamasına rağmen yukarıda bahsettiğimiz yöntemlerin ASP.NET uygulamalarında performans açısından kritik bir yere sahip olduğunu söylebiliriz. Söz konusu yöntemlerin ASP.NET sayfalarınızın performansını arttırması dileğiyle...