优化Web页面响应时间

在开发Web应用程序时,经常会遇到需要执行耗时操作的情况。例如,当用户点击一个按钮以从服务器检索数据并绑定到ASP.NETGrid时,这个过程可能需要30秒才能显示结果。在此期间,用户可能会尝试点击页面上的其他选项,这可能会导致意外的行为和页面结果的异常。因此,当网页执行服务器端任务超过几秒钟时,显示一个“处理中”的消息是明智的。

虽然可以使用Ajax .NET控件(如“Modal Popup Extender”、模态窗口、iframe等)来实现更复杂的效果,但本文将介绍一种简单、轻量级的JavaScript解决方案,它不仅快速,而且不会干扰ASP.NET服务器端代码。这种方法同样适用于其他Web编程语言,如PHP、JSP、Cold Fusion等。

场景

假设有一个ASPX页面,它在用户点击按钮时检索数据并绑定到ASP.NETGrid。这个过程需要30秒才能显示结果,在此期间,页面需要:

  • 显示一个“处理中”的消息
  • 显示一个GIF动画图像以增加动态感
  • 限制用户访问其他控件,以避免不必要的后端请求

解决方案

首先,在HTML代码中添加一个

标签,用于显示消息和图像。初始时,将这个
标签的可见性设置为隐藏。

<div id="ProcessingWindow" visible="false"> <img src="loading.gif" /> </div>

接下来,创建一个JavaScript函数ShowProcessMessage(),用于将

的可见性设置为“可见”,并将进度消息和图像添加到
标签的innerHTML中。

<script language="javascript" type="text/javascript"> function ShowProcessMessage(PanelName) { document.getElementById(PanelName).style.visibility = "visible"; document.getElementById(PanelName).innerHTML = '处理中...请稍候... '; DisableAllControls('btnLoad'); return true; } </script>

此外,还需要一个JavaScript函数DisableAllControls(),用于禁用除触发事件的控件(如按钮)和隐藏类型(ASP.NET事件处理程序和ViewState)之外的所有控件。

<script language="javascript" type="text/javascript"> function DisableAllControls(CtrlName) { for (var i = 0; i < document.forms[0].elements.length - 1; i++) { var elm = document.forms[0].elements[i]; if ((elm.name == CtrlName) || (elm.type == 'hidden')) { elm.disabled = false; } else { elm.disabled = true; } } } </script>

最后,在按钮的OnClientClick事件中调用JavaScript函数。这样,页面控制首先触发客户端函数,然后转到服务器端事件处理程序。

<asp:Button ID="btnLoad" runat="server" onclick="btnLoad_Click" Text="获取歌曲列表" OnClientClick="ShowProcessMessage('ProcessingWindow')" />

在开发Web页面的复杂功能时,这是一个经常遇到的问题。希望这个解决方案对有所帮助。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485