Web Formlarının İşlem aşamaları (Web Forms Processing Stages)

by Eren 16. December 2008 14:59

Sunucu tarafında kullanıcının web isteklerinde Asp.NET istemciye web formunu göndermeden evvel, web formunu tabii tuttuğu işlemlere değineceğim.
Asp.NET web formlarını işlerken gerçekleşen aşamaları sekiz maddeye ayırabiliriz.
Şekil 1 - Web formlarının tabi tutulduğu aşamalar

Bu aşamalar hakkında bir şeyler yazayım.

Page Framework Inıtialization

Asp.NET'in sayfayı oluşturduğu aşamadır. Sayfanıza yerleştirdiğiniz kontroller üretilir. Eğer sayfa ilkkez çağırılmıyorsa yani istemciden gelen sayfa talebi bir postback işlemi (örneğin bir butona basılıp cevabının beklenmesi) ise kontroller sıfırdan oluşturulmaz bunun yerine serileştirilmiş viewstate bilgisini deserialize işlemine tabi tutarak bunları sayfanın kontrollerine uygular ve istemciye geri döndürür.

Bu aşamada tetiklenen olayımız sayfanın Page_Inıt olayıdır.

User Code Initialization

Bu aşamada o meşhur Page_Load olayımız tetkiklenir.  Bu olay gerek sayfamız ilk kez sunucudan istendiğinde gerekse postBack işlemleri ile olsun her talepte tetikleniz. Biz bu olay ile sadece sayfa ilk yüklendiğinde tetiklenmesini istediğimiz işlemleri Page.IspostBack kontrolü yaparak Page.IsPostBack == false bloğunun içerisine yazmamız gerekmektedit. Mesela sayfamız ilk yüklendiğinde sayfamızda bulunan grid kontrolünü veritabanımızdan gelen veriler ile yüklemek istiyoruz. Bunu haliyle page_load olayının içerisine yazarız. Ama IspostBack kontrolünü yapmassak sayfamız sunucuya her istek gönderildiğinde tetiklenecek ve bu boş yere veri tabanında veri çekmemize sebebiyet verecektir. Bu sebeple sayfanın sadece ilk yüklenmesi durumuna kod yazmamız gerekecek. Bu da daha önce belirttiğim gibi IspostBack özelliğinin false olma durumudur.

Çoğu zaman sayfadaki kontrollerimizin özelliklerini bu page_load metodu içinde yaparız ve kontrollerimizi bu şekilde başlatırız. Malum kod işletilirken değiştirdiğimiz kontrol özellikleri viewState stringi olarak depolanır ve istemcilere gönderilir. Bu da uzun viewstate'lerin istemciler tarafından indirilmesi işlemini uzatır. Bunun yerine oluşturduğumuz kontrollerin özelliklerini html tagları içerisinden atanıp EnabledViewState özelliği false yapılırsa performans açısından daha iyi olur kanaatindeyim.

Validation

 Asp.NET kullanıcılardan veri alınan kontrollerin otomatik olarak denetlendiği ve uyarı / hata mesajları vermek için kullanılan  Validate kontrollerine sahiptir. Page_Load metodundan hemen sonra işlem görürler. Bu kontrollerin sonucunu almak için Page.IsValid özelliğini kontrol etmemiz gerekecektir.

Event Handling

Olay yakalama sayfa tamamen yüklendikten ve validation işlemleri gerçekleştikten sonra yapılır. Sayfamızda gerçekleşen olayları ikiye ayırabiliriz;


Immediate Response Event: Bir butona basıldığında bir linke tıklandığında ya da başka bir kontrolun javascriptte _doPostBack() fonksiyonunu çağırdığından ivedi olarak gerçekleşen olaylardır.

Change Events : Bir kontroldeki bir değer değiştiğinde gerçekleşen olaylardır. Mesela bir textbox içeriğinin değişmesi gibi. Bu kontrollerin AutoPostBack özelliği true olursa değişiklik hemen olayı tetikler false olursa diğer postback olayı ile olay tetiklenir.

Olayların tetiklenmesi babında web tabanlı programlar windows tabanlı programlardan çok farklı bir mantıkta çalışmaktadırlar. Windows uygulaması çalışmaya başladığı andan itabaren bellekte onun için sabit bir yer ayrılır ve bu formda gerçekleşen olaylar hemen tetiklenebilir. Ama bir Asp.net olayının tetiklenmesi başka bir olayı bekleyebilir ve bazan birden çok olay sıralı bir şekilde bir postback işlemi ile tetiklenmek zorunda kalabilir. Mesela Textboxun TextChange olayına kod yazdık ve textBoxun AutoPostBack özelliğini false olayak set ettik. Bu durumda bu olayın tetiklenmesi için Immediate Response Event gerekecektir (bir butonun click lenmesi gibi.)
Bu durumda gerçekleşecek olaylar için aşağıdaki sıralamadan söz edebiliriz.

• Page.Init

• Page.Load

• TextBox.TextChanged

• Button.Click

• Page.PreRender

• Page.Unload

Automatic Data Binding
 Bildiğimiz gibi Asp.NET in klasik veritabanı işlemlerimizi kod yazmadan gerçekleştirebilmemiz için bize sunduğu bir takım DataSource kontrolleri vardır. Bu kontroller update delete insert select gibi veri tabanı işlemlerini yukarda belirttiğimiz sıralamanın PreRender aşamasından önce kotarırlar ve PreRender olayondan sonra webformda gerekli değişimler olur. Kontrollerin ve diğer olayların oluşmasından sonraki adımda yer aldıkları için datasource ile getirilen ya da modifiye edilen data ya bu kontrollerden ve olaylardan ulaşılmaz. PreRender den sonra HTML çıktısı üretilip istemcitye gönderilmektedir. Sayfamızda gerçekleşmesini istediğimiz (client tarafından görülecek) en son değişiklikleri bu olayın içine yazarız.
Clean Up 
Bu aşama sayfanın hayat döngüsündeki son aşamadır.HTML kodu render edildikten sonra bu aşamaya geçilir ve  Page.Unload olayı tetiklenir. oluşturulan HTML çıktısı değiştirilememekle birlikte sayfada kullanılan objeler hala hayattadır ve biraz sonra garbage collector tarafından infaz edilmeyi beklemektedirler. Bu aşamada kullanılmış olan nesneler dispose edilerek. Sayfanın yaşamı tamamlanmış olur.

Tags:

Asp.NET

Comments

7/2/2010 1:31:08 AM #

Uğur

Merhaba. Güzel bir makale yazmışsınız.
Sıkılmadan, merak ettiklerimi öğrenmiş oldum.
Fakat bir kısmı anlayamadım.
Automatic Data Binding kısmında geçen şu kısımda tam oalrak ne demek istediğinizi anlamadım. Açıklama yaparsanız sevinirim. Tekrardan teşekkürler. Başarılar...
Bu kontroller update delete insert select gibi veri tabanı işlemlerini yukarda belirttiğimiz sıralamanın PreRender aşamasından önce kotarırlar ve PreRender olayondan sonra webformda gerekli değişimler olur. Kontrollerin ve diğer olayların oluşmasından sonraki adımda yer aldıkları için datasource ile getirilen ya da modifiye edilen data ya bu kontrollerden ve olaylardan ulaşılmaz.

Uğur Turkey | Reply

Add comment


(Will show your Gravatar icon)

  Country flag

biuquote
  • Comment
  • Preview
Loading



Hakkımda Kısaca

Eren Çetin

Bilgisayar Mühendisi

İstanbul / Turkiye

Eren Çetin - 2010
Eren Çetin, Bilgisayar Mühendisi , Yazılım Geliştirme Uzmanı