微软建议的ASP性能优化28条守则

微软|性能|优化|微软|性能|优化

 
目录
技巧 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 缓存为列表,而不是数组。下面是简单的示例:

' Get Recordset, return as HTML Option list
Function FetchEmploymentStatusList
Dim rs, fldName, s
Set rs = CreateObject(?ADODB.Recordset?)
rs.Open ?select StatusName, StatusID from EmployeeStatus?, _
?dsn=employees;uid=sa;pwd=;?
s = ?<select name=??EmploymentStatus??>? & vbCrLf
Set fldName = rs.Fields(?StatusName?) ' ADO Field Binding
Do Until rs.EOF
' Next line violates Don't Do String Concats,
' but it's OK because we are building a cache
s = s & ? <option>? & fldName & ?</option>? & vbCrLf
rs.MoveNext
Loop
s = s & ?</select>? & vbCrLf
rs.Close
Set rs = Nothing ' See Release Early
FetchEmploymentStatusList = s ' Return data as a String
End Function

在适当的条件下,可以将 ADO 记录集本身缓存在 Application 或 Session 作用域中。有两个警告:

必须将 ADO 标记为自由线程
必须使用断开连接的记录集。
如果不能保证满足这两个要求,则不要缓存 ADO 记录集。在下面的“非敏捷组件”和“不要缓存连接”技巧中,我们将讨论将 COM 对象存储在 Application 或 Session 作用域中的危险性。

当您将数据存储在 Application 或 Session 作用域时,数据将保留在那里,直到您以编程方式改变它、Session 过期或 Web 应用程序重新启动为止。如果数据需要更新怎么办?要手工强制对 Application 数据进行更新,您可以访问只有管理员才可访问的 ASP 页来更新数据。或者,您可以通过函数定期自动刷新数据。下面例子存储带有缓存数据的时间戳,并隔一段时间后刷新数据。

<%
' error handing not shown...
Const UPDATE_INTERVAL = 300 '

时间: 2024-12-03 23:24:46

微软建议的ASP性能优化28条守则的相关文章

jQuery性能优化28条建议你值得借鉴_jquery

jQuery性能优化28条建议 一直在寻找有关jQuery性能优化方面的小窍门,能让我那臃肿的动态网页应用变得轻便些.找了很多文章后,我决定将最好最常用的一些优化性能的建议列出来.我也做了一个jQuery性能优化的简明样式表,你可以打印出来或者设为桌面背景. 一.选择器性能优化建议 1. 总是从#id选择器来继承 这是jQuery选择器的一条黄金法则.jQuery选择一个元素最快的方法就是用ID来选择了. 复制代码 代码如下: $('#content').hide(); 或者从ID选择器继承来选

ASP.NET性能优化八条建议_实用技巧

1.数据库访问性能优化 A.尽量减少数据库连接,并充分利用每次数据库连接:连接的创建.打开和关闭是有开销的.可以使用连接池 B.合理使用存储过程:存储过程是存储在服务器端的一组预编译的SQL.使用存储过程可以避免对SQL的多次编译,后续查询可以复用之前的执行计划.另外存储过程可以减少SQL语句网络传输开销 C.优化SQL语句:这个就太多了,如合理使用索引.视图,避免复杂子查询 2.字符串操作性能优化 A.使用值类型的ToString()方法 对不同类型进行 + 连接时,会发生装箱操作转化为引用类

JavaScript提高网站性能优化的建议(二)_javascript技巧

在javascript关于提高网站性能的几点建议(一)中,从HTTP请求到页面渲染几个方面对提高网站性能提出了几点建议,本文是学习Steve Sounders的另外一本书<高性能网站建设进阶指南>之后,从JavaScript性能的角度进行总结概括,诸君共勉. JavaScript性能是实现高性能Web应用程序的关键 --Steve Sounders 1 利用js作用域链 作用域链(scope chain) 当执行一段JavaScript代码(全局代码或函数)时,JavaScript引擎会创建为

淘宝网前台应用性能优化实践

本文曾发表于2013年4月的<程序员>杂志 近年来,随着用户数和PV的增加,淘宝网的后端服务器数量增长很快:并且我们知道,Web页面延迟时间和转化率之间有着直接的关联.出于提升系统吞吐量.降低成本.减少页面延迟.提升用户浏览体验.提高交易转化率的考虑,淘宝网在性能优化领域做了很多尝试.本文将从应用性能分析.基础设施优化.应用自身优化.前端性能优化这四个方面,对淘宝网的优化尝试做一个总结. 应用性能分析 1. 前台应用介绍 淘宝网前台应用是指商品详情.店铺.购物车等买家直接可以看到和使用的应用,

ASP.NET性能优化小结(ASP.NET&amp;amp;C#)

ASP.NET: 一.返回多个数据集 检查你的访问数据库的代码,看是否存在着要返回多次的请求.每次往返降低了你的应用程序的每秒能够响应请求的次数.通过在单个数据库请求中返回多个结果集,可以减少与数据库通信的时间,使你的系统具有扩展性,也可以减少数据库服务器响应请求的工作量. 如果用动态的SQL语句来返回多个数据集,那用存储过程来替代动态的SQL语句会更好些.是否把业务逻辑写到存储过程中,这个有点争议.但是我认为,把业务逻辑写到存储过程里面可以限制返回结果集的大小,减小网络数据的流量,在逻辑层也不

ASP.NET应用程序性能优化

asp.net|程序|性能|优化 [把前一段时间给单位项目所做性能优化的一些想法整理了以下,分享交流] ASP.NET 应用程序性能优化 1 前言性能优化的主要目标是提高"并发用户数量","吞吐量","可靠性"这样几个指标. 本质上说,性能优化的工作应该是多方面的,要做到"点面结合.由表及里".比如:从代价的角度来考虑,应尽量做到改动量小,易实施:从用户角度看,应做到快速响应或快速提示:从软件结构的角度看,又要兼顾到系统结构的

ASP.NET性能优化小结(ASP.NET&amp;amp;C#)_实用技巧

ASP.NET: 一.返回多个数据集 检查你的访问数据库的代码,看是否存在着要返回多次的请求.每次往返降低了你的应用程序的每秒能够响应请求的次数.通过在单个数据库请求中返回多个结果集,可以减少与数据库通信的时间,使你的系统具有扩展性,也可以减少数据库服务器响应请求的工作量. 如果用动态的SQL语句来返回多个数据集,那用存储过程来替代动态的SQL语句会更好些.是否把业务逻辑写到存储过程中,这个有点争议.但是我认为,把业务逻辑写到存储过程里面可以限制返回结果集的大小,减小网络数据的流量,在逻辑层也不

yahoo网站性能优化的建议:Yahoo军规再度挖掘

文章描述:本来这是个老生常谈的问题,上周自成又分享了一些性能优化的建议,我这里再做一个全面的Tips整理,谨作为查阅型的文档,不妥之处,还请指正. 本来这是个老生常谈的问题,上周自成又分享了一些性能优化的建议,我这里再做一个全面的Tips整理,谨作为查阅型的文档,不妥之处,还请指正:如果你已经对yahoo这些优化建议烂熟于心,果断点这里 一. Yahoo的军规条例: 谨记:80%-90%的终端响应时间是花费在下载页面中的图片,样式表,脚本,flash等:详细的解释来这里查:http://deve

二十八条改善 ASP 性能和外观的技巧 1-6(From Ms China)——七月份的文章,好像还没人转过

技巧|性能 二十八条改善 ASP 性能和外观的技巧 Len Cardinal,高级顾问,Microsoft Consulting Services George V. Reilly Microsoft IIS Performance Lead 改编自Nancy Cluts 的文章 开发人员技术工程师 Microsoft Corporation 2000 年 4 月 摘要:本文介绍优化 ASP 应用程序和 VBScript 的技巧. 引言 性能是一个特征.您必须预先设计性能,否则您以后就得重写应用