当前位置:中国站长下载文章中心网页编程ASP编程 → 二十八条改善 ASP 性能和外观的技巧

二十八条改善 ASP 性能和外观的技巧

减小字体 增大字体 作者:不详  来源:不详  发布时间:2006-8-13 0:44:37
     摘要:本文介绍优化 ASP 应用程序和 VBScript 的技巧。
  
  目录
  技巧 1:将经常使用的数据缓存在 Web 服务器上
  技巧 2:将经常使用的数据缓存在 Application 或 Session 对象中
  技巧 3:将数据和 HTML 缓存在 Web 服务器的磁盘上
  技巧 4:避免将非敏捷的组件缓存在 Application 或 Session 对象中
  技巧 5:不要将数据库连接缓存在 Application 或 Session 对象中
  技巧 6:合理地使用 Session 对象
  技巧 7:将代码封装在 COM 对象中
  技巧 8:迟一点获得资源,早一点释放资源
  技巧 9:进程外执行过程以性能换取可靠性
  技巧 10:使用显式选项
  技巧 11:在子例程和函数中使用局部变量
  技巧 12:将经常使用的数据复制到脚本变量中
  技巧 13:避免重新确定数组的维数
  技巧 14:使用响应缓冲
  技巧 15:批处理内嵌脚本和 Response.Write 语句
  技巧 16:如果页面需要很长时间才能完成,那么执行前使用 Response.IsClientConnected
  技巧 17:使用 <OBJECT> 标记例示对象
  技巧 18:对于 ADO 和其它组件使用 TypeLib 绑定
  技巧 19:利用浏览器的验证功能
  技巧 20:避免在循环语句中使用字符串串联
  技巧 21:启用浏览器和代理缓存
  技巧 22:尽可能使用 Server.Transfer 代替 Response.Redirect
  技巧 23:在目录 URL 中使用后斜杠
  技巧 24:避免使用服务器变量
  技巧 25:升级到最新和最出色的
  技巧 26:优化 Web 服务器
  技巧 27:进行性能测试
  技巧 28:阅读资源链接
  引言
  
  性能是一个特征。您必须预先设计性能,否则您以后就得重写应用程序。就是说,有哪些好的策略可使 Active Server Pages (ASP) 应用程序性能达到最佳?
  
  本文介绍了优化 ASP 应用程序和 Visual Basic® Scripting Edition (VBScript) 的技巧。本文讨论了许多陷阱。本文列出的建议已经在 http://www.microsoft.com 和其它站点中进行了测试,效果十分显著。本文假定您已经对 ASP 开发,包括 VBScript 和/或 JScript、ASP Application、ASP Session 和其它 ASP 固有对象(Request、Response 和 Server)有了基本了解。
  
  通常,ASP 性能主要取决于 ASP 代码本身以外的很多因素。我们不在一篇文章中罗列出所有的信息,在本文结尾处我们列出了与性能有关的资源。这些链接涵盖了 ASP 和非 ASP 主题,包括 ActiveX® 数据对象 (ADO)、组件对象模型 (COM)、数据库和 Internet Information Server (IIS) 配置。这些都是我们喜欢的一些链接 - 一定要去看看。
  
  技巧 1:将经常使用的数据缓存在 Web 服务器上
  典型的 ASP 页从后端数据存储中检索数据,然后将结果转换成超文本标记语言 (HTML)。无论数据库的速度如何,从内存中检索数据总要比从后端数据存储中检索数据快得多。从本地硬盘读取数据通常也比从数据库中检索数据更快。因此,通常可以将数据缓存在 Web 服务器上(存储在内存或磁盘中),来提高性能。
  
  缓存是传统的以空间换取时间的做法。如果您缓存的内容正确,那么您可以看到性能会有显著的提高。为使缓存有效,必须保存那些经常重复使用的数据,且要重新计算这些数据需要(适度)大的开销。如果缓存的都是些陈旧的数据,就会造成内存浪费。
  
  不经常发生改变的数据是很好的缓存候选数据,因为您不必担心随着时间的迁移该数据与数据库同步的问题。组合框列表、引用表、DHTML 碎片、扩展标记语言 (XML) 字符串、菜单项和站点配置变量(包括数据源名称 (DSN)、Internet 协议 (IP) 地址和 Web 路径)都是很好的缓存候选内容。注意您可以缓存数据的“表示”,而不缓存数据本身。如果 ASP 页很少更改,且缓存的开销也很大(例如,整个产品目录),则应考虑事先产生 HTML,而不是在响应每个请求时重新显示。
  
  应将数据缓存在哪里,有哪些缓存策略?通常,数据缓存在 Web 服务器的内存或磁盘中。下两个技巧讲述了这两个方法。
  
  技巧 2: 将经常使用的数据缓存在 Application 或 Session 对象中
  ASP Application 和 Session 对象为将数据缓存在内存中提供了方便的容器。您可以将数据指派到 Application 和 Session 对象中,这些数据在 HTTP 调用之间保留在内存中。Session 数据是按每个用户分别存储的,而 Application 数据则在所有用户之间共享。
  
  什么时候将数据装载到 Application 或 Session 中呢?通常,数据是在启动 Application 或 Session 时装载。要在 Application 或 Session 启动过程中装载数据,应将适当的代码分别添加到 Application_OnStart() 或 Session_OnStart() 中。这些函数应在 Global.asa 中,如果没有,则可以添加这些函数。还可以在第一次需要时装载该数据。为此,在 ASP 页中添加一些代码(或编写一个可重复使用的脚本函数),以检查数据是否存在,如果不存在,就装载数据。这是一个传统的性能技术,称为“惰性计算” - 在您知道需要某一个值以前不计算该值。例如:
  
  <%
  Function GetEmploymentStatusList
  Dim d
  d = Application(?EmploymentStatusList?)
  If d = ?? Then
  ' FetchEmploymentStatusList function (not shown)
  ' fetches data from DB, returns an Array
  d = FetchEmploymentStatusList()
  Application(?EmploymentStatusList?) = d
  End If
  GetEmploymentStatusList = d
  End Function
  %>
  
  
  可以为所需要的每个数据块编写类似的函数。
  
  应以什么格式存储数据?可以存储任何变体类型,因为所有脚本变量都是变体型。例如,您可以存储字符串、整数或数组。通常,您将以这些变量类型之一存储 ADO 记录集的内容。要从 ADO 记录集获取数据,您可以手工将数据复制到 VBScript 变量,一次一个字段。使用一个 ADO 记录集持久函数 GetRows()、GetString() 或 Save()(ADO 2.5),可加快速度且更容易一些。其详细情况已超出本文所讨论的范围,但下面给出了一个函数举例,说明使用 GetRows() 返回记录集数据的一个数组:
  
  ' Get Recordset, return as an Array
  Function FetchEmploymentStatusList
  Dim rs
  Set rs = CreateObject(?ADODB.Recordset?)
  rs.Open ?select StatusName, StatusID from EmployeeStatus?, _
  ?dsn=employees;uid=sa;pwd=;?
  FetchEmploymentStatusList = rs.GetRows() ? Return data as an Array
  rs.Close
  Set rs = Nothing
  End Function
  
  
  对上面举例做更进一步改进,可以将 HTML 缓存为列表,而不是数组。

[1] [2] [3] [4] [5] [6] [7] [8] [9]  下一页