透过 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 才会查询数据库。
-------------------------------------------------
本帖的示例代码下载点:
https://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] 网络文件