ASP技巧集锦(官方权威版)-3

技巧

  技巧 6:妙用 Session 对象
  在肯定了在 Applications 和 Sessions 中缓存的优点之后,我们建议您避免使用 Session 对象。下面将会谈到,当用于忙碌站点时,Sessions 有几个缺点。所谓忙碌,通常是指站点每秒请求数百页或同时有数千个用户。该技巧对于必须进行水平扩展的站点,即那些利用多个服务器来适应负载或执行容错功能的站点来说,更加重要。对于较小的站点,如 intranet 站点,Sessions 的便利,与开销相比也是值得的。
  为了翻新,ASP 自动为每个访问 Web 服务器的用户创建一个 Session。每个 Session 有大约 10 KB 内存开销(在存储在 Session 中的任何数据中是最高的),并使所有的请求都慢了一点。Session 一直保持活动状态,直到达到可配置的超时(通常 20 分钟)为止。
  Session 最大的问题不是性能而是可伸缩性。Session 不能跨越 Web 服务器;一旦在一个服务器上创建了 Session,它的数据就保持在那里。这意味着,如果您在 Web 领域中使用 Sessions,您将不得不为每个用户的请求设计一种策略,以便始终将这些请求引向用户的 Session 所在的服务器。这被称为将用户“粘”到 Web 服务器上。术语“粘性会话”即来源于此。由于 Session 没有保持到磁盘上,所以,当 Web 服务器崩溃时,被“粘住”的用户将丢失他们的 Sessions 状态。
  用于实施粘性会话的策略包括硬件和软件解决方案。如 Windows 2000 Advanced Server 中的网络负载平衡解决方案和 Cisco 公司的“本地指向器”解决方案可以实施粘性会话,但以牺牲一些可伸缩性为代价。这些解决方案并不完美。我们不主张您现在全盘推翻您的软件解决方案(我们过去常用 ISAPI 筛选器和 URL 矫直对方案进行检查)。
  Application 对象也不能跨越服务器;如果您需要在 Web 领域内共享并更新 Application 数据,则需要使用后端数据库。但只读的 Application 数据在 Web 领域中仍然有用。
  如果只是为了增加正常运行时间(用于处理故障转移和服务器维护),大多数执行重要任务的站点将需要部署至少两台 Web 服务器。所以,在设计执行重要任务的应用程序时,您将需要实施“粘性会话”,或者简单地避开 Sessions 以及其他任何在单个 Web 服务器上存储用户状态的状态管理技术。
  如果当前没有使用 Sessions,请确保将它们关闭。可以通过“Internet 服务管理器”(请参阅 ISM 文档)来为应用程序执行该操作。如果决定使用 Sessions,可以采取几个方法来将对性能的影响降低到最小。
  可以将不需要 Sessions 的内容(如“帮助”屏幕、访问者区域等)移动到关闭了 Sessions 的、单独的 ASP 应用程序中。可以逐页提示 ASP:在给定的页中您不需要 Session 对象;使用位于 ASP 页顶端的如下指令:
  <% @EnableSessionState=False %>
  使用该指令的一个很好的原因是,Session 给框架集带来了有趣的问题。ASP 保证任何时候只执行一个来自 Session 的请求。这样可以确保如果浏览器为一个用户请求了多个页时,在每一时刻只有一个 ASP 请求将进入 Session;这就避免了在访问 Session 对象时出现多线程问题。遗憾的是,结果,框架集中的所有页均被以串行化方式绘制,一个接一个地,而不是同时地。这样,用户可能不得不等待很长时间才能得到所有框架内容。这意味着:如果某些框架页不信任 Session,一定要使用 @EnableSessionState=False 指令告诉 ASP。
  作为使用 Session 对象的替代方式,有很多方法可以用来管理 Session 状态。对于状态数量较小的情况(不到 4 KB),通常建议使用 Cookies、QueryString 变量和隐藏形式的变量。对于较大数量的数据,如购物推车,则使用后端数据库是最合适的选择。关于在 Web 服务器领域中的状态管理技术已经有很多资料。详细信息,请参阅 会话状态(英文)。
  
  技巧 7:在 COM 对象中封装代码
  如果您有很多 VBScript 或 JScript,那么您可以通过把代码移动到已编译的 COM 对象来经常改进它们的性能。已编译的代码通常比被解释代码运行得更快。已编译的 COM 对象可以通过“早期绑定”访问其他 COM 对象,这种调用 COM 对象方法的手段,比脚本所使用的“后期绑定”更有效。
  将代码封装在 COM 对象种有如下好处(超越性能):
  COM 对象是将表达逻辑与业务逻辑分隔开来的好办法。
  COM 对象启用了代码重用。
  很多开发商发现,用 VB、C++ 或 Visual J++ 书写的代码,比 ASP 更容易调试。
  COM 对象有一些缺点,包括初始开发时间以及需要不同的编程技巧。需要警告您的是,封装“少”量的 ASP 可能会导致性能降低,而不是提高。通常,在少量 ASP 代码封装到 COM 对象时出现这样的情况。这时候,创建和调用 COM 对象的开销,超过了已编译代码的好处。至于 ASP 脚本和 COM 对象代码怎样合并才能产生最佳性能还有待测试。注意,与 Windows NT(R) 4.0/IIS 4.0 相比,Microsoft 已经在 Windows 2000/IIS 5.0 中极大地提高了脚本和 ADO 性能。这样,已编译代码对 ASP 代码的性能优势已经随着 IIS 5.0 的引入而降低。
  有关在 ASP 中使用 COM 对象的优缺点的更多讨论,请参阅 ASP 组件准则和用 COM 和 Microsoft Visual Basic 6.0 对分布式应用程序进行编程(英文)。如果您的确部署了 COM 组件,要对它们进行强度测试是非常重要的。实际上,所有 ASP 应用程序都应当作为正式过程进行强度测试。
  
  技巧 8:晚点获取资源,早点释放资源
  这是个小技巧。通常,最好晚点获取资源而要早点释放资源。这些资源包括 COM 对象、文件句柄和其他资源。
  ADO 连接和记录集是这种优化的首要目标。当您使用完记录集,就是说用它的数据打印完一个表格后,请立即将它释放,而不是等到页的末尾。将您的 VBScript 变量设置为 Nothing 是最好的做法。不要让记录集简单地脱离作用域。同时,应当释放任何有关的 Command 或 Connection 对象。(不要忘了对记录集或“连接”调用 Close(),在将它们设置为 = Nothing 之前。)这将缩短数据库必须为您调整资源的时间跨度,并将数据库连接尽可能快地释放给连接池。

时间: 2024-09-30 15:39:42

ASP技巧集锦(官方权威版)-3的相关文章

ASP技巧集锦(官方权威版)-1

技巧 简 介 性能是一个特性.您需要预先设计性能,或是在日后重新编写应用程序.换句话说,什么是最大限度优化 Active Server Pages (ASP) 应用程序性能的好策略? 本文为优化 ASP 应用程序和"Visual Basic(R) 脚本编辑器 (VBScript)"提供了许多技巧.对许多陷阱和缺陷进行了讨论.本文所列的建议均在 http://www.microsoft.com 及其他站点上进行了测试,而且工作正常.本文假定您对 ASP 开发有基本的理解,包括对 VBSc

ASP技巧集锦(官方权威版)-2

技巧 技巧 3:在 Web 服务器磁盘上缓存数据和 HTML 有时,数据过多不能在内存中进行缓存."过多"是一种定性的判断:它取决于打算消耗的内存量,还有缓存项的数量和这些项的检索频率.总之,如果有过多的数据要在内存中缓存,请考虑以文本或 XML 文件的形式,在 Web 服务器的硬盘上缓存数据.可以将在磁盘上缓存数据和在内存中缓存数据组合起来,为站点建立最优的缓存策略. 注意,在度量单个 ASP 页的性能时,在磁盘上检索数据不一定比从数据库中检索数据快.但是,缓存减轻了数据库和网络的负

ASP技巧集锦(官方权威版)-4

技巧 技巧 9:进程外的执行将牺牲可靠性 ASP 和 MTS/COM+ 都有允许您以可靠性换取性能的配置选项.当建立和部署应用程序时,应当理解这种交换. ASP 选项 ASP 应用程序可以配置为以三种方式之一运行.在 IIS 5.0 中引入了术语"隔离级"来描述这些选项.三个隔离级值分别是低.中和高: 低级隔离.该隔离级在所有版本的 IIS 中受到支持,并且是最快的.它在主 IIS 进程 Inetinfo.exe 中执行 ASP.如果 ASP 应用程序崩溃,则 IIS 也将崩溃.(要在

ASP技巧集锦(官方权威版)-5

技巧 技巧 13:避免重新定义数组 尽量避免 Redim 数组.从关心性能的角度来说,如果计算机受物理内存的限制,最好一开始将数组的维数设置为最差方案 - 而不要将维数设置为最佳方案,再根据需要重新定义维数.这并不意味着明知道不需要那么多而就是应该分配太多的内存. 下面代码展示了您没有必要地使用了Dim 和 Redim 来解决. <% Dim MyArray() Redim MyArray(2) MyArray(0) = "hello" MyArray(1) = "go

ASP技巧集锦(官方权威版)-6

技巧 技巧 16:在开始长时间的任务之前先使用 Response.IsClientConnected 如果用户失去耐心,他们可以在开始执行他们的请求之前放弃 ASP 页.如果他们单击了 Refresh 或跳转到服务器的其他页上,在 ASP 请求队列的末尾将有一个新的请求,而在队列的中间有一个断开连接的请求.这通常发生在服务器处于高负荷的情况下(它有一个很长的请求队列,相应的响应时间也很长),这只能使情况更糟.如果用户不再连接,将没有执行 ASP 页的点(特别是低速.重量级的 ASP 页).可以使

ASP技巧集锦(官方权威版)-7

技巧 技巧 21:启用浏览器和代理缓存默认情况下,ASP 禁用浏览器和代理中的缓存.这将很有意义,因为 ASP 生来就是动态的,具有潜在地对时间敏感的信息.如果有一个不需要对每次查看进行刷新的页,则应该启用浏览器和代理缓存.这使得浏览器和代理能在某一段时间内,使用某一页的缓存副本,这时间的长短可以控制.缓存能明显减轻服务器负荷,使用户的感受好一些.哪种动态页可以缓存?举例说明:天气页,每 5 分钟更新一次.列出新闻的主页或新闻发布的主页,每天更新 2 次. 公共基金运营列表,基本的统计数小时更新

改进性能和样式的24个ASP 技巧

技巧|性能 1.ASP技巧集锦(官方权威版)-7 [2005-02-23]     2.ASP技巧集锦(官方权威版)-6 [2005-02-23]     3.ASP技巧集锦(官方权威版)-5 [2005-02-23]     4.ASP技巧集锦(官方权威版)-4 [2005-02-23]     5.ASP技巧集锦(官方权威版)-3 [2005-02-23]     6.ASP技巧集锦(官方权威版)-2 [2005-02-23]     7.ASP技巧集锦(官方权威版)-1 [2005-02-

ASP开发44条技巧集锦之一

技巧 下一节:ASP开发44条技巧集锦之二 1. 几个常用函数 Round(pi, 2) 四舍五入 FormatNumber(k,4) ' 把 k 格式化为带四位小数点的数. eg. 如果k =20000则显示为20,000.00:如果把formatnumber(k,0)则为20,000 Replace(expression,find,replacewith) '返回一字符串,其中指定的子串已被另一个子串替换 Left(String,Length) '返回指定数目的从字符串的左边算起的字符串.

ASP开发44条技巧集锦之二

技巧 上一节:ASP开发44条技巧集锦之一 21. 嵌入另一页   <iframe class="TBGen" style="top:2px" ID="UploadFiles" src="upload.asp" frameborder=0 scrolling=no width="250" height="25"></iframe> ----------------