透過 ASP.NET 的 Client Callback 技術,可讓 JavaScript 和 .NET 直接作溝通,並以遠遠遠遠快於 UpdatePanel 控制項的速度,高速執行 Web 應用程式。本帖提供一個 ASP.NET Callback 的樣本下載,僅用極少的代碼,實作類別似 Google 的即時關鍵詞查詢,且效能超優,程式的響應速度有如 JavaScript 般地快速。
看到本帖的摘要,您可能會覺得 Callback 技術相當驚人,確實,其資料轉送量、執行速度,都遠遠比 ASP.NET AJAX 的 UpdatePanel 控制項要優秀。若您用一些網路監控工具觀察 ,會看到在許多情況下,Callback 在網路中傳送的資料量,甚至比 UpdatePanel 控制項要少了數十倍甚至上百倍。
但 Callback 是 ASP.NET 2.0 就已推出的舊技術,甚至可說它只是在微軟 AJAX Framework 出來前的一套過渡技術。其功能及函數極有限,因此並不適合開發較複雜的應用。因此就開發方便性而言,其遠不如 ASP.NET AJAX 控制項,以及 UpdatePanel 控制項來得方便。但不可否認的,在某些應用較單純,且需要高效能、快速響應的頁面,Callback 仍是相當不錯的選擇。
本帖提供兩個簡易樣本下載,第一個樣本,可在 TextBox 的 OnBlur、OnKeyup 等 JavaScript 事件被觸發時,查詢 SQL Server,且 Onkeyup 可達成如同 Google 般的即時 key-in 查詢效果;第二個樣本,則改成透過 Button Click 才會查詢資料庫。
-------------------------------------------------
本帖的範例程式碼下載點:
http://files.cnblogs.com/WizardWu/090208.zip
(執行本樣本,需要 SQL Server 的 Northwind 資料庫,以及 IIS 或 VS 2008)
-------------------------------------------------
圖 1 一離開 TextBox 時 (OnBlur),會用極快的速度查詢資料庫
如同版工在之前的「網站效能越來越差怎麼辦? 」一文,以及下面這篇文章所提到的:
UpdatePanel 提示和技巧 (MSDN Magazine, 2007/6):
http://msdn.microsoft.com/zh-cn/magazine/cc163413.aspx
微軟為了達成 AJAX 的使用方便性,而犧牲了許多效能,讓 UpdatePanel 控制項運作得相關沒有效率,因其用 ViewState 儲存了大量的頁面狀態。反觀 Callback 技術雖然速度快 ,網路傳輸量遠比 UpdatePanel 控制項少,但其缺點為功能過於陽春、開發不便;且版工我還發現一個缺點,就是在其 RaiseCallbackEvent 方法中,會讓 Response.Write、 JavaScript 的 alert 失效,導致捕捉到的錯誤資訊,無法顯示在頁面上讓程式員和使用者知道。
另聽說在 ASP.NET 4.0 時,UpdatePanel 控制項的 Render 方式會有新的改進,可以只 Render 特定的頁面欄位值,會比 Partial Rendering 聚焦到更小的區塊。在這之前,若您的頁面需要以特優的效能實現簡單的功能,如本帖的樣本,Callback 仍是個不錯的選擇。
--------------------------------------------------
參考檔案:
[1] ICallbackEventHandler 介面
http://msdn.microsoft.com/zh-cn/library/system.web.ui.icallbackeventhandler(VS.80).aspx
http://msdn.microsoft.com/zh-cn/library/system.web.ui.icallbackeventhandler_members(VS.80).aspx
[2] 董大偉、奚江華等人寫的 ASP.NET 2.0 書籍
[3] CallBack 與 UpdatePanel 的效能比較
http://www.cnblogs.com/jeff377/archive/2007/12/09/988347.html
[4] 網路檔案