知识大全 微软建议的ASP性能优化28条守则
Posted 知
篇首语:天下之事常成于困约,而败于奢靡。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 微软建议的ASP性能优化28条守则相关的知识,希望对你有一定的参考价值。
微软建议的ASP性能优化28条守则 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
引言 性能是一个特征 您必须预先设计性能 否则您以后就得重写应用程序 就是说 有哪些好的策略可使 Active Server Pages (ASP) 应用程序性能达到最佳? 本文介绍了优化 ASP 应用程序和 Visual Basic® Scripting Edition (VBScript) 的技巧 本文讨论了许多陷阱 本文列出的建议已经在 和其它站点中进行了测试 效果十分显著 本文假定您已经对 ASP 开发 包括 VBScript 和/或 JScript ASP Application ASP Session 和其它 ASP 固有对象(Request Response 和 Server)有了基本了解 通常 ASP 性能主要取决于 ASP 代码本身以外的很多因素 我们不在一篇文章中罗列出所有的信息 在本文结尾处我们列出了与性能有关的资源 这些链接涵盖了 ASP 和非 ASP 主题 包括 ActiveX® 数据对象 (ADO) 组件对象模型 () 数据库和 Internet Information Server (IIS) 配置 这些都是我们喜欢的一些链接 一定要去看看 技巧 将经常使用的数据缓存在 Web 服务器上 典型的 ASP 页从后端数据存储中检索数据 然后将结果转换成超文本标记语言 (HTML) 无论数据库的速度如何 从内存中检索数据总要比从后端数据存储中检索数据快得多 从本地硬盘读取数据通常也比从数据库中检索数据更快 因此 通常可以将数据缓存在 Web 服务器上(存储在内存或磁盘中) 来提高性能 缓存是传统的以空间换取时间的做法 如果您缓存的内容正确 那么您可以看到性能会有显著的提高 为使缓存有效 必须保存那些经常重复使用的数据 且要重新计算这些数据需要(适度)大的开销 如果缓存的都是些陈旧的数据 就会造成内存浪费 不经常发生改变的数据是很好的缓存候选数据 因为您不必担心随着时间的迁移该数据与数据库同步的问题 组合框列表 引用表 DHTML 碎片 扩展标记语言 (XML) 字符串 菜单项和站点配置变量(包括数据源名称 (DSN) Internet 协议 (IP) 地址和 Web 路径)都是很好的缓存候选内容 注意您可以缓存数据的 表示 而不缓存数据本身 如果 ASP 页很少更改 且缓存的开销也很大(例如 整个产品目录) 则应考虑事先产生 HTML 而不是在响应每个请求时重新显示 应将数据缓存在哪里 有哪些缓存策略?通常 数据缓存在 Web 服务器的内存或磁盘中 下两个技巧讲述了这两个方法 技巧 : 将经常使用的数据缓存在 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 ) 可加快速度且更容易一些 其详细情况已超出本文所讨论的范围 但下面给出了一个函数举例 说明使用 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 记录集 在下面的 非敏捷组件 和 不要缓存连接 技巧中 我们将讨论将 对象存储在 Application 或 Session 作用域中的危险性 当您将数据存储在 Application 或 Session 作用域时 数据将保留在那里 直到您以编程方式改变它 Session 过期或 Web 应用程序重新启动为止 如果数据需要更新怎么办?要手工强制对 Application 数据进行更新 您可以访问只有管理员才可访问的 ASP 页来更新数据 或者 您可以通过函数定期自动刷新数据 下面例子存储带有缓存数据的时间戳 并隔一段时间后刷新数据 <% error handing not shown Const UPDATE_INTERVAL = Refresh interval in seconds Function to return the employment status list Function GetEmploymentStatusList UpdateEmploymentStatus GetEmploymentStatusList = Application(?EmploymentStatusList?) End Function Periodically update the cached data Sub UpdateEmploymentStatusList Dim d strLastUpdate strLastUpdate = Application(?LastUpdate?) If (strLastUpdate = ??) Or _ (UPDATE_INTERVAL < DateDiff(?s? strLastUpdate Now)) Then Note: o or more calls might get in here This is okay and will simply result in a few unnecessary fetches (there is a workaround for this) FetchEmploymentStatusList function (not shown) fetches data from DB returns an Array d = FetchEmploymentStatusList() Update the Application object Use Application Lock() to ensure consistent data Application Lock Application(?EmploymentStatusList?) = Events Application(?LastUpdate?) = CStr(Now) Application Unlock End If End Sub 请参见 World s Fastest ListBox with Application Data 上面还有一个例子 要知道在 Session 或 Application 对象中缓存大的数组不是一个好的做法 在访问数组的任何元素之前 脚本语言的语法要求必须临时复制整个数组 例如 如果将由字符串组成的有 个元素的数组(该数组将美国邮政编码映射到当地的气象站)缓存在 Application 对象中 ASP 必须先将所有的 个气象站复制到临时数组中 然后才能提取一个字符串 在这种情况下 用自定义方法建立一个自定义组件来存储气象站 或使用一个词典组件会更好 再警告大家一下 不要将婴儿与洗澡水一起倒掉 数组能快速查寻和存储在内存中是邻近的关键数据对 索引一个词典比索引一个数组要慢得多 应针对您的实际情况 选择提供最佳性能的数据结构 技巧 将数据和 HTML 缓存在 Web 服务器的磁盘上 有时 数据可能太多 无法都缓存在内存中 太多 只是一个说法 这要看您想消耗多少内存 以及需缓存的项目数和检索这些项目的频率 在任何情况下 如果数据太多而无法都缓存在内存中 则考虑 cha138/Article/program/net/201311/12287相关参考
最大限度优化你的Asp程序的性能 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! ASP能快速执行
ASP.NET如何进行性能优化问题 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一SqlDat
ASP.NET如何进行性能优化问题[3] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 四控件的
ASP.NET如何进行性能优化问题[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 二查询语
ASP.NET如何进行性能优化问题[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一Sql
ASP.NET26个常用性能优化方 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 访问数据库资源
ASP.NET性能提升秘诀之管道与进程优化 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! ASP
ASP.NET十个有效性能优化的方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 数据库访问性
.Net课堂:ASP.NET常用的优化性能方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 数
总结的ASP.NET26个常用性能优化方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 数据库