終於漸漸明白ASP.NET+AJAX的實質。
它的目標是代替人手寫javascript。一方面可以簡化網頁的編寫,降低AJAX的實施難度;另一方面是鼓勵大家摒棄javascript,這是打擊java陣營的一步棋,儘管javascript與java沒有多大關係。不用手寫javascript,直接就能獲得類似AJAX的效果,著實讓ASP.NET的程式員興奮了一番。但是原理還是AJAX的原理,換湯沒換藥,難度的降低是以損失效能為代價的。
跟以往微軟的很多手段一樣,通過加入一些折衷的辦法,來佔領市場,擊敗對手。例如當年的Visual J++,最大的賣點是執行速度的提升,但暗地裡加入了很多違背Java標準的手段,不能實現跨平台,不具移植性,很快在主流的java開發平台爭奪中敗下陣來。
為了對抗藉著AJAX壯大聲威的Java陣營,MS故伎重施,將ASP.NET渲染一番,重裝上陣。但這隻是一個剛剛成型的產品,宣傳意義大於應用價值。
使用ASP.NET+AJAX,必須把架構提供的很大的一包jscript lib打包傳到用戶端(SourceJavaScript.axd等等)。粗數量級估計有400K以上,所以第一次開啟頁面會特別慢。
正是這個jscript lib實現了ScriptManager以及UpdatePanel等AJAX特性的控制項。它接管了UpdatePanel內的控制項的提交事件,負責與伺服器互動,當返回後,再用jscript lib內的script對控制項更新。這樣,jscript lib將重新整理限制在了這個控制項之內,在客戶看來,確實達到了局部更新的效果。
為了掩飾在通訊過程中的延遲,jscript lib提供了UpdateProgress來穩住使用者。
Jscript lib實際的作用是管理控制項,實現頁面無重新整理操作。但這僅僅是AJAX的一部分,一小部分。
它屏蔽了使用者對XML和Javascript的使用,從而降低了開發的複雜度。但對訊息的控制,仍是完全的ASP.NET的模式,即每一個操作,都要提交到伺服器,運算處理,結果回傳到用戶端。它至少砍掉了AJAX的兩個很重要的功能。
AJAX的主要特徵是非同步擷取資料,並且將這個放在首位,才能實現更快的響應。使用者在未進行下一步操作的時候,AJAX已經悄悄把需要的資料下載到本地,這樣就能更快的響應使用者的下一步操作。例如,判斷“使用者名稱是否登入”,在使用者填寫完使用者名稱後,就可以由javascript自動發起到伺服器的請求,在使用者填寫後面的資料過程中,用戶端已經可以知道使用者名稱是否可用。
AJAX的一個重要意義在於將部分運算分布在用戶端進行,從而減輕伺服器負擔。這個任務的執行者正是Javascript。很多可以在本地進行的工作,例如簡單的“使用者名稱不可為空”的判斷,直接在本地完成,不需要與伺服器互動,也就不需要等待響應。
ASP.NET+AJAX只做了表面文章,減少頁面重新整理,而代價是必須載入大而全的jscript庫延緩頁面響應。這些功能,通過簡單的javascript+XML就能實現,而且更加快捷精練。
到了這裡,我們幾乎可以斷言,Visual Studio 2008提供的ASP.NET+AJAX是偷梁換柱的AJAX。它只能滿足對效能要求不高,網速好,而追求新鮮詞彙的使用者。要開發真正的AJAX的網頁,還是繞不開Javascript和XML。
</