当前位置: 首页 > 图文教程 > 网络编程 > ASP > 二十八条改善 ASP 性能和外观的技巧(15-21)

ASP
对连串英文自动换行的解决方法 IE5.5
怎样写你自己的EMAIL组件(原理)
ASP中有关timeout超时的体会
用ASP实现从SQL Server导出数据到Access
ASP向NT域中加一个用户
ASP乱码的解决方法
关于 aspsmartupload 注册问题
利用XML不离开页面刷新数据
IIS 处理 SEARCH 请求漏洞
不用组件实现上载功能(1)
不用组件实现上载功能(2)
在网页中实现OICQ里的头像选择的下拉框
仅用xsl和asp实现分页功能
如何使用context()方法将数据置入表格(XML)
利用ASP从远程服务器上接收XML数据
将数据库里面的内容生成EXCEL
怎样在ASP里面创建统计图表
加密你的Access数据库
利用global.asp定时执行ASP
加密QueryString数据

二十八条改善 ASP 性能和外观的技巧(15-21)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 56 ::
收藏到网摘: n/a

  技巧 15:批处理内嵌脚本和 Response.Write 语句
技巧 16:如果页面需要很长时间才能完成,那么执行前使用 Response.IsClientConnected
技巧 17:使用 <OBJECT> 标记例示对象
技巧 18:对于 ADO 和其它组件使用 TypeLib 绑定
技巧 19:利用浏览器的验证功能
技巧 20:避免在循环语句中使用字符串串联
技巧 21:启用浏览器和代理缓存
技巧 15:批处理内嵌脚本和 Response.Write 语句
VBScript 语法 <% = expression %> 将“expression”的值写到 ASP 输出流中。如果响应缓冲未启用,那么执行其中的每一条语句,都会以许多小的数据包通过网络将数据写到浏览器中。这样速度很慢。而且穿插执行少量的脚本和 HTML,将引起脚本引擎和 HTML 之间的切换,从而降低性能。因此,使用下面的技巧:使用 Response.Write 调用代替捆绑紧密的内嵌表达式。例如,在下面的示例中,在每一行的每一字段对响应流有一次写操作,每一行在 VBScript 和 HTML 之间有许多切换:

<table>
<% For Each fld in rs.Fields %>
<th><% = fld.Name %></th>
<%
Next
While Not rs.EOF
%>
<tr>
<% For Each fld in rs.Fields %>
<td><% = fld.Value %></td>
<% Next
</tr>
<% rs.MoveNext
Wend %>
</table>


下面的代码更有效,每一行对响应流有一次写操作。所有的代码都包含在一个 VBScript 块内:

<table>
<%
For each fld in rs.Fields
Response.Write (?<th>? & fld.Name & ?</th>? & vbCrLf)
Next
While Not rs.EOF
Response.Write (?<tr>?)
For Each fld in rs.Fields %>
Response.Write(?<td>? & fld.Value & ?</td>? & vbCrLf)
Next
Response.Write ?</tr>?
Wend
%>
</table>


当禁用响应缓冲时,这一技巧的效果特别大。最好启用响应缓冲,然后看批处理 Response.Write 是否有助于提高性能。

(在这一特定举例中,建立表主体的嵌套循环 (While Not rs.EOF...) 可以用仔细构建的 GetString 调用来替代。)

技巧 16:如果页面需要很长时间才能完成,那么执行前使用 Response.IsClientConnected
如果用户性急,他们可能会在您开始执行他们的请求之前,就会放弃 ASP 页面。如果他们单击刷新或移到服务器上的另一个页面,在 ASP 请求队列的末尾就有一个新的请求等候,在队列的中间有一个断开连接的请求。当服务器的负载很高时(因此请求队列就会很长,响应时间也会相应地变长),就会经常发生这种情况,这样只能使情况变得更糟。如果用户不再连接,执行 ASP 页面(特别是慢的、大的 ASP 页面)已没有任何意义。您可以使用 Response.IsClientConnected 属性检查这一情况。如果它返回 False,则应调用 Response.End 并放弃页的其余部分。事实上,IIS 5.0 已将这一做法编为程序 - 每当 ASP 即将执行新请求时,它就会检查请求在队列中已等候了多长时间。如果已经在那里等候了多于 3 秒钟,ASP 将检查客户机是否仍处于连接状态,如果没有连接,就立即终止请求。您可以在配置数据库中使用 AspQueueConnectionTestTime 设置将超时时间由 3 秒调整为其它值。

如果页面要花很长时间才能执行完,也可以不时地检查 Response.IsClientConnected。当启用了响应缓冲时,最好不时地执行 Response.Flush,以用户知道,正在发生什么事。

注意 在 IIS 4.0 上,除非先执行了 Response.Write,否则 Response.IsClientConnected 就不能正常工作。如果启用了缓冲,您也必须执行 Response.Flush。在 IIS 5.0 上,却没有必要这样做,- Response.IsClientConnected 工作正常。在任何情况下,Response.IsClientConnected 都会有一些开销,因此只有在一个操作至少要花(比方说) 500 毫秒(如果您想维持每秒钟数十页的吞吐量,这是一个很长的时间)才使用它。经验表明,不要每次重复执行紧密循环时都调用它,如显示表的许多行时 - 每隔二十或五十行调用一次可能比较合适。

技巧 17:使用 <OBJECT> 标记例示对象
如果要引用不在所有代码路径(特别是服务器或应用程序作用域的对象)中使用的对象,使用 Global.asa 中 <object runat=server id=objname> 标记声明它们,而不使用 Server.CreateObject 方法。Server.CreateObject 能立即创建对象。如果以后不再使用该对象,您就浪费了资源。<object id=objname> 标记声明 objname,但在其方法或属性第一次使用以前,不会创建 objname。

这又是一个惰性计算的例子。

技巧 18:对于 ADO 和其它组件使用 TypeLib 声明
当使用 ADO 时,开发人员经常加入 adovbs.txt,以访问 ADO 的各种常量。在要使用常量的每个页面中必须包含此文件。此常量文件相当大,给每个 ASP 页