Projenizde Asp.Net Ajax kullanmak istiyorsunuz,peki nelere dikkat etmelisiniz?
1. Localhost’a güvenmeyin:Uygulamalarınızı
test edebilmek için mutlaka bir test sunucunuz olmalı. Burada ideal
olan projenin gerçekte çalışacağı ortama en yakını olmasıdır. En
azından ucuz bir Asp.Net hosting paketi alarak test sunucusu olarak
kullanabilirsiniz. Güncel versiyon oluştukça bu sunucuda test
edebilirsiniz.
2. UpdatePanel’i efektif kullanmalısınız.
3. UpdatePanel ‘i kullanıcının bir süre bekletileceği noktalarda kullanın,örneğin
Gridview refresh/filter olurken. Kullanılmaması gereken yerler:
doğrulama işlemlerinde (validation), DropDownList seçimi değiştiğinde
veya radiobutton / checkbox seçildiğinde (kullanıcı gerçek zamanlı
cevap bekler) sunucu tarafında bir kod çağrılacağı zaman.
4. Script servisleri (AJAX kütüphaneleri aracılığıyla web service çağrıldığında) kullanıyoruz,
fakat bazı zamanlarda projeye impelemente etmek çok güç olabiliyor. Bu
noktada dengeyi korumalısınız, elde ettiğiniz avantajlar
(kullanışlılık, hız kazancı, aynı işlemi tekrar partial rendering ile
gerçekleştirdiğinizde üstün performans) bütçe ve proje sürecini
etkileyecektir. Script servislerini sunucu tabanlı validasyonlarda
kolaylıkla kullanabilirsiniz.
5. Default olarak tüm UpdatePanel’ler sayfa her partial postpack olduğunda yenilenir: UpdateMode attribute yardımıyla conditional ve sadece güncellenmesi gereken yerlerde güncellensin şeklinde değiştirebilirsiniz. (MyPanel.Update)
6. UpdatePanel’ler mümkün olduğunca kısa olmalı:
Script Manager her istek gönderdiğinde tüm viewstate değeri
gönderiliyor, fakat elde ettiğiniz cevap, updatepanel’in update
edeceği büyüklüğe bağlı olarak değişecektir.Kompleks sayfalarda tüm
sayfayı kaplayan bir updatepanel kullanmamalısınız.
7. Bir istekte birden fazla paneli refresh edebilirsiniz: Sayfanın
yerleşimini UpdatePanel’e göre ayarlamak zorunda değilsiniz.
UpdatePanel’in birisi sağ üst köşede bir yerde olsun, (upperPanel).
Diğeri de en altta olsun, (lowerPanel). Bu sayfada bir request
oluştuğunda, sunucu tarafında hangi panelin update edileceğini
belirlemelisiniz:
upperPanel.Update();
lowerPanel.Update();
8. Sayfanızın request yöneticisi Singleton’dur:
Bunun anlamı, aynı anda sadece bir isteğe cevap
verilebilir.Sayfamızdaki UpdatePanel içerisinde iki buton olduğunu
hayal edelim. (A butonu textbox1 i update ediyor, B butonu textbox2 yi
update ediyor.) Eğer kullanıcı A butonuna tıklarsa, request sunucuya
gönderilecek, B butonuna tıklarsa önceki request iptal edilecek ve
sadece textbox2 nin update edildiğini göreceğiz. Gerçekte siz bunun
farkına varmayacaksınız, çünkü kontrollerin göstereceği etkiye
güveniyorsunuz. (Eğer request iptal edilirse,yeni request veriyi HTML
kontrolünde tutacaktır), fakat sayfanızın mantığı çerçevesince, iki
farklı çözüm bulunmakta:Scritpt servislerini kullanarak sayfanızı DTHML
kullanarak update etmek, UI (arayüz) devre dışı bırakmak ve request in
gönderilmesine ardından işlenmesine imkan sağlamak.
9. AJAX enabled bir web sayfasından Web Servislerine erişmek özel bir durumdur:
Script servislerini kullandığınızda, web servisine erişmek istemeniz
sıradan bir durum değildir.Performansı arttırmak için ve aynı zamanda
geliştirmeyi kolaylaştırmak için, XML SOAP yerine JSON tercih
etmelisiniz.(web servisinize sadece “scriptable” attribute eklemeniz
yeterli olacaktır. AJAX kütüphanesi hemen hemen bütün serialization
işlemini otomatik yapacaktır).Diğer bir ilginç nokta da normal bir web
servisi sürekli durumunu korumaz,buradaki asıl mesele, web servisinizin
oturum durumunu aktifleştirmektir. Session nesnelerinizi ASP.Net
uygulamaları ile paylaşabilirsiniz , bu yaklaşımla web servisiniz bir
çok veriyi ve fonksiyonelliği uygulamanızla paylaşabilecektir.Örneğin;
Hangi kullanıcı giriş yaptı?
10. Viewstate performansınız düşüürebilir: Partial
rendering işlemini hatırlarsanız (UpdatePanel…) ViewState her request
için gidip gelir, eğer sayfanızda çok büyük bir viewstate oluşmuşsa
perfomansını kötü etkileyecektir, ViewState kontrolünüzü devre dışı
bırakabilirsiniz. (Gridview olması en kritik noktalardandır).ViewState
‘in olması demek extra 1 Mb büyüklük demektir. Diğer bir ipucu da,
kontrollerin ID isimlendirmelerini kısa tutmaktır. Her kontrol için
tekrarlanarak performans kaybına neden olurlar.
11. Standard Asp .net 2.0 validatorleri %100 Partial Rendering yapmıyorlar (UpdatePanel): Scott Guthrie bunun için bir örnek paylaşmıştı,
gerekli DLL dosyalarını indirerek ve web.config ayarlarınızdan birkaç
değişiklik yaparak istenilen çalışma sağlanmış olacaktır.
12. Eğer tam olarak ihtiyacınızı karşılıyorsa AJAX toolkit güzel bir tercih olacaktır:
AJAX toolkit içerisinde size kodlama zamanı kazandıracak süper
kontroller barındırıyor. Örneğin; AutocompleteExtender, ModalPopup,
Accordions, Cascading dropdowns, … fakat her zaman %100 sizin
ihtiyacınızı karşılamayabilirler. Müşteriye tesliminden önce mutlaka
testleri yapılmalıdır.
13. Herhangi bir MVP, MVC tasarım deseni kullanmadan önce:
AJAX ve Partial Rendering ile ilgili uyuşma sorunu olup olmadığını
kontrol edin, örneğin; bazı implementasyonlar UpdatePanel’leri
desteklemiyor.
14. AutocompleteExtender kontrolü: binlerce kayıt içeren combobox lar için mükemmel bir yaklaşım.Veriyi çekerken script servislerini kullanıyor, roket hızında
15. Her işlemde AJAX kullanmamak gerekiyor:
Kimi zaman AJAX modunda düşünüldüğünde, bazı fonksiyonellikler
kullanıcı tarafında bir javascript ile çözümlenebiliyor (örneğin; bazı
seçimler neticesinde Combobox içine küçük değerlerin yüklenmesi gibi ).
Sade client javascript çözümleri, AJAX çözümlerinden daha hızlıdır.
(sunucuya git gel olmadığından).
16. Child page veya user control içerisinden Script Manager’e erişebilirsiniz:
Scriptmanager’ı Masterpage içerisinde tanımlayabilirsiniz. Herhangi bir
child page veya user control erişiminiz sağlanmış olur; Code behind
tarafında ASPX içerisindeki ScriptManagerProxy veya ScriptManager.Getcurrent(this.Page).
17. Gerektiğinde UpdatePanel içerisindeki bir buton postpack gerçekleştirebilir: updatepanel de bir değişiklik yapmanıza gerek kalmadan,pageload anındayken ScriptManager.RegisterAsyncPostBack(yourControlID) diyerek postback yaptırmaya zorlyabilirsiniz.
18. RegisterStartupScript kullanarak javascript kodunu sayfa yüklendiğinde nasıl çağırabiliriz: Yine benzer bir metod uygulayarak, scriptManager.RegisterStartupScript.