|
![]() |
名片设计 CorelDRAW Illustrator AuotoCAD Painter 其他软件 Photoshop Fireworks Flash |
|
目录 本文介绍了优化 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 服务器上 缓存是传统的以空间换取时间的做法。假如您缓存的内容准确,那么您可以看到性能会有显著的提高。为使缓存有效,必须保存那些常常重复使用的数据,且要重新计算这些数据需要(适度)大的开销。假如缓存的都是些陈旧的数据,就会造成内存浪费。 不常常发生改变的数据是很好的缓存候选数据,因为您不必担心随着时间的迁移该数据与数据库同步的问题。组合框列表、引用表、DHTML 碎片、扩展标记语言 (XML) 字符串、菜单项和站点配置变量(包括数据源名称 (DSN)、Internet 协议 (IP) 地址和 Web 路径)都是很好的缓存候选内容。注重您可以缓存数据的“表示”,而不缓存数据本身。假如 ASP 页很少更改,且缓存的开销也很大(例如,整个产品目录),则应考虑事先产生 HTML,而不是在响应每个哀求时重新显示。 应将数据缓存在哪里,有哪些缓存策略?通常,数据缓存在 Web 服务器的内存或磁盘中。下两个技巧讲述了这两个方式。 技巧 2: 将常常使用的数据缓存在 Application 或 Session 对象中 什么时候将数据装载到 Application 或 Session 中呢?通常,数据是在启动 Application 或 Session 时装载。要在 Application 或 Session 启动过程中装载数据,应将适当的代码分别添加到 Application_OnStart() 或 Session_OnStart() 中。这些函数应在 Global.asa 中,假如没有,则可以添加这些函数。还可以在第一次需要时装载该数据。为此,在 ASP 页中添加一些代码(或编写一个可重复使用的脚本函数),以检查数据是否存在,假如不存在,就装载数据。这是一个传统的性能技术,称为“惰性计算” - 在您知道需要某一个值以前不计算该值。例如: <%
应以什么格式存储数据?可以存储任何变体类型,因为所有脚本变量都是变体型。例如,您可以存储字符串、整数或数组。通常,您将以这些变量类型之一存储 ADO 记录集的内容。要从 ADO 记录集获取数据,您可以手工将数据复制到 VBScript 变量,一次一个字段。使用一个 ADO 记录集持久函数 GetRows()、GetString() 或 Save()(ADO 2.5),可加迅速度且更轻易一些。其具体情况已超出本文所讨论的范围,但下面给出了一个函数举例,说明使用 GetRows() 返回记录集数据的一个数组: \\\' Get Recordset, return as an Array
\\\' Get Recordset, return as HTML Option list
必须将 ADO 标记为自由线程 当您将数据存储在 Application 或 Session 作用域时,数据将保留在那里,直到您以编程方法改变它、Session 过期或 Web 应用程序重新启动为止。假如数据需要更新怎么办?要手工强制对 Application 数据进行更新,您可以访问只有治理员才可访问的 ASP 页来更新数据。或者,您可以通过函数定期自动刷新数据。下面例子存储带有缓存数据的时间戳,并隔一段时间后刷新数据。 <% \\\' Function to return the employment status list \\\' Periodically update the cached data \\\' Note: two or more calls might get in here. This is okay and will simply \\\' FetchEmploymentStatusList function (not shown) \\\' Update the Application object. Use Application.Lock()
要知道在 Session 或 Application 对象中缓存大的数组不是一个好的做法。在访问数组的任何元素之前,脚本语言的语法要求必须临时复制整个数组。例如,假如将由字符串组成的有 100,000 个元素的数组(该数组将美国邮政编码映射到当地的气象站)缓存在 Application 对象中,ASP 必须先将所有的 100,000 个气象站复制到临时数组中,然后才能提取一个字符串。在这种情况下,用自定义方式建立一个自定义组件来存储气象站 - 或使用一个词典组件会更好。 再警告大家一下,不要将婴儿与洗澡水一起倒掉:数组能迅速查寻和存储在内存中是邻近的要害数据对。索引一个词典比索引一个数组要慢得多。应针对您的实际情况,选择提供最佳性能的数据结构。 技巧 3:将数据和 HTML 缓存在 Web 服务器的磁盘上 注重当测量单个 ASP 页的性能时,检索磁盘上的数据可能不一定要比从数据库检索数据更快。但缓存会降低数据库和网络上的负载。在高负载的情况下,这样做可大大改善总体吞吐量。当缓存开销很大的查询结果(如多表联接或复合存储过程)或大的结果集时,这是异常有效的。与往常相同,要测试一下几种方案的优劣。 ASP 和 COM 提供一些建立基于磁盘的缓存方案的工具。ADO 记录集 Save() 和 Open() 函数保存和装载磁盘中的记录集。可以使用这些方式重新编写上面 Application 数据缓存技巧中的代码示例,用文件的 Save() 代替写到 Application 对象中的代码。 有一些其它组件可以用于文件: Scripting.FileSystemObject 可使您创建、读和写文件。 技巧 4:避免将非灵敏的组件缓存在 Application 或 Session 对象中 详细来讲,当任何不灵敏的组件缓存在 Session 或 Application 对象时,将引起性能瓶颈。灵敏的组件是被标记为 ThreadingModel=Both 的组件,它聚集 Free-threaded marshaler (FTM);或被标记为 ThreadingModel=Neutral 的组件。(Neutral 模型是 Windows® 2000 和 COM+ 的新增模型。) 下列组件不是灵敏的: 自由线程的组件(除非它们聚集 FTM)。 在 IIS 4.0 中,被标记为 ThreadingModel=Both 的组件被认为是灵敏的。在 IIS 5.0 中,只有这一点还不够。组件必须不仅被标记 Both,还必须聚集 FTM。有关灵敏性的文章讲述了如何使以 Active Template Library 编写的 C++ 组件聚集 FTM。要注重假如组件缓存界面指针,那么那些指针本身必须是灵敏的,或必须存储在 COM 共用界面表 (GIT) 中。假如您不能重新编译 Both 线程组件以聚集 FTM,那么您可以将组件标记为 ThreadingModel=Neutral。或者,假如您不想让 IIS 执行灵敏性检查(因此,您可以答应非灵敏的组件存储在 Application 或 Session 作用域中),您可以在配置数据库中将 AspTrackThreadingModel 设置为 True。不建议更改 AspTrackThreadingModel。 假如您想将以 Server.CreateObject 创建的非灵敏的组件存储在 Application 对象中,IIS 5.0 将出现一个错误。您可以在 Global.asa 中使用 <object runat =server scope=application ...> 避免这一错误,但不建议这样做,因为这会导致汇集和串行化,关于这一点将在下面讲述。 假如您缓存非灵敏的组件会出现什么毛病?缓存在 Session 对象中的非灵敏的组件将 Session 锁定于 ASP 工作者线程。ASP 维护一个工作者线程池来处理哀求。通常情况下,一个新哀求总是由第一个可用的工作者线程来处理。假如 Session 被锁定于一个线程,那么哀求必须等到其相关的线程可用为止。这里有一个类比,也许会有所帮助:您去一家超级市场,挑选了一些商品,并在 #_3 收款台付款。其后,每当您在那家超级市场为商品付款时,您总是必须在 #_3 收款台付款,即使其它收款台前排队的人较少或者没有人排队,也是如此。 将非灵敏的组件存储在 Application 作用域对性能的影响甚至更坏。ASP 必须创建一个特别的线程运行存储在 Application 作用域中的非灵敏组件。这会有两个结果:所有调用都必须汇集到此线程,且所有调用都排成长队。“汇集”的意思是参数必须存储在内存的共享区域;执行一个开销很大的到特别线程的上下文切换;执行组件的方式;将结果汇集到共享区域;执行另一个开销很大的上下文切换,将控制返回到原始的线程。“串行化”意思是指每次只运行一个方式。两个不同的 ASP 工作者线程不能同时在共享组件上执行多个方式。这样就杜绝了并发性,特殊是在多处理器计算机上。更糟的是,所有非灵敏的 Application 作用域的组件共享一个线程(主机 STA),因此串行化的影响甚至更显著。 如之奈何?下面是一些一般的规则。假如您使用 Visual Basic (6.0) 或更早版本编写对象,那么不要将它们缓存在 Application 或 Session 对象中。假如您不知道对象的线程模型,不要缓存它。不要缓存非灵敏的对象,而应在每个页面创建和释放它们。对象直接在 ASP 工作者线程上运行,因此没有汇集或串行化。假如 COM 对象在 IIS 服务器上运行,且假如它们不花长时间初始化和删除,性能尚可。注重单线程对象不应该这样使用。小心 - VB 可创建单线程对象!假如您必须这样使用单线程对象(如 Microsoft Excel 电子表格),别指望会有很高的吞吐量。 当 ADO 被标记为自由线程,ADO 记录集可以安全地缓存。要将 ADO 标记为自由线程,使用 Makfre15.bat 文件,该文件通常位于目录 //Program Files/Common/System/ADO 中。 警告 假如您使用 Microsoft Access 作为数据库,不应将 ADO 标记为自由线程的。ADO 记录集也必须切断连接。一般来说,假如您不能控制站点中的 ADO 配置(例如,您是一个独立的软件厂商 [ISV],向治理他们自己的配置客户销售 Web 应用程序),最好不要缓存记录集。 词典组件也是灵敏的对象。LookupTable 从数据文件中装载其数据,可用于组合框数据和配置信息。Duwamish Books 中的 PageCache 对象可提供词典语法,Caprock Dictionary 也可提供。这些对象或其派生对象可以构成有效缓存策略的基础。注重 Scripting.Dictionary 对象不是灵敏的,不应该存储在 Application 或 Session 作用域中。 技巧 5:不要将数据库连接缓存在 Application 或 Session 对象中 可以不缓存数据库连接,而是在使用 ADO 的每个 ASP 页面中创建和删除 ADO 对象。这是很有效的,因为 IIS 内嵌了数据库连接池。更正确地说,IIS 自动启用 OLEDB 和 ODBC 连接池。这就能确保在每个页面上创建和删除连接将是有效的。 因为连接的记录集存储一个到数据库连接的引用,所以您不应将连接的记录集缓存在 Application 或 Session 对象中。但是,您可以安全地缓存断开连接的记录集,它们不保存到其数据连接的引用。要断开记录集连接,执行下面的两个步骤: Set rs = Server.CreateObject(?ADODB.RecordSet?) \\\' Populate the recordset with data \\\' Now disconnect the recordset from the data provider and data source
技巧 6:合理地使用 Session 对象 简言之,ASP 自动为每个访问 Web 服务器的用户创建一个 Session。每个 Session 大约需要 10 KB 的内存开销(最主要的是数据存储在 Session 中),这就使所有的哀求都减慢。在配置的超时时段(通常是 20 分钟)结束以前,Session 一直保留有效。 Session 的最大的问题不是性能,而是可扩展性。Session 不能跨越几台 Web 服务器,一旦在一台服务器上创建 Session,其数据就留在那儿。这就意味着假如您在一个 Web 服务器群使用 Session,您必须设计一个策略,将每个用户哀求始终发到用户 Session 所在的那台服务器上。这被称为将用户“粘”在 Web 服务器上。术语“粘性会话”就是从这里派生而来的。假如 Web 服务器崩溃,被“粘住的”用户将丢失他们的会话状态,因为会话不是粘到磁盘上。 实现粘性会话的策略包括硬件和软件解决方案。诸如 Windows 2000 Advanced Server 中的网络负载平衡和 Cisco 的 Local Director 之类的解决方案都可以实现粘性会话,代价是要损失一定程度的可扩展性。这些解决方案是不完善的。不建议此时部署您自己的软件解决方案(我们过去经常使用 ISAPI 筛选器和 URL 转变等等)。 Application 对象也不跨越多台服务器,假如您必须跨越 Web 服务器群共享和更新 Application 数据,您必须使用后端数据库。但是,只读 Application 数据在 Web 服务器群中仍是有用的。 假如只是因为要增加运行时间(处理故障转移和服务器维护),大多数要害任务站点至少需部署两台 Web 服务器。因此,在设计要害任务应用程序时,必须实现“粘性会话”,或干脆避免使用 Session,以及任何其它将用户状态存储在单个 Web 服务器上的状态治理技术。 假如您不使用 Session,一定要将它们关闭。您可以通过 Internet Services Manager,为应用程序执行此操作(参见 ISM 文档)。假如您决定使用 Session,您可以采用一些方式减轻它们对性能的影响。 您可以将不需要 Session 的内容(如帮助屏幕,访问者区域等等)移到另一个关闭了 Session 的 ASP 应用程序中。您可以逐页提示 ASP,您不再需要该页面上的 Session 对象,使用以下放在 ASP 页面最上面的指令: <% @EnableSessionState=False %>
有许多治理 Session 状态的方式,可替代 Session 对象的使用。对于少量的状态(少于 4 KB),我们通常建议使用 Cookies、QueryString 变量和隐式变量。对于更大数据量,如购物小车,后端数据库是最适合的选择。有关 Web 服务器群中状态治理技术的文章很多。有关具体信息,请参见 Session 状态参考资料。 技巧 7: 将代码封装在 COM 对象中 将代码封装在 COM 对象中还有一些长处(除性能之外): COM 对象有利于将表示逻辑与业务逻辑分开。 有关在 ASP 中使用 COM 的长处和缺点的具体讨论,参见 ASP Component Guidelines and Programming Distributed Applications with and Microsoft Visual Basic 6.0。假如您部署 COM 组件,以负荷对它们进行测试特殊重要。事实上,理所当然应对所有的 ASP 应用程序进行负荷测试。 技巧 8:迟一点获得资源,早一点释放资源 这种优化方式主要用于 ADO 连接和记录集。当您使用完记录集,比方说在显示一个表及其数据之后,应立刻释放它,而不是等到页面结束时再释放。将 VBScript 变量设置为 Nothing 是最好的做法。不要让记录集超出作用域之外。而且,要释放任何相关的 Command 或 Connection 对象(在将记录集或连接设置为 = Nothing 之前,不要忘记调用 Close())。这会缩短数据库必须为您预备资源的时间,并尽快释放数据库到连接池的连接。 技巧 9:进程外执行过程以性能换取可靠性 ASP 选项 低级隔离。这在 IIS 的所有版本中都得到支持,且是最快的。它在 Inetinfo.exe 中运行 ASP,Inetinfo.exe 是主要 IIS 进程。假如 ASP 应用程序崩溃,IIS 也会崩溃。(要在 IIS 4.0 下重新启动 IIS,Web 站点治理员应使用诸如 InetMon 之类的工具监视站点,假如服务器发生故障,应启用批处理文件以重新启动服务器。IIS 5.0 引入了可靠的重新启动,该方式可使发生故障的服务器自动重新启动。) 注重 当您运行 ASP 进程外应用程序时(中级或高级隔离),它们在 NT4 中的 MTS 和在 Windows 2000 中的 COM+ 中运行。即,在 NT4 中它们在 Mtx.exe 中运行;而在 Windows 2000 中,它们在 DllHost.exe 中运行。您可以在任务治理器中看到这些进程在运行。您还可以看到 IIS 如何为进程外 ASP 应用程序配置 MTS 程序包或 COM+ 应用程序。 COM 选项 您可以看到未配置的组件比库应用程序略有一些优势。库应用程序比服务器应用程序的性能长处更大。这是因为库应用程序与 ASP 在同一进程内运行,而服务器应用程序在它们的自有进程内运行。进程间的调用比进程内调用开销更大。而且,当在进程之间传递诸如记录集之类的数据时,必须在两个进程之间复制所有的数据。 陷阱!当使用 COM 服务器应用程序时,假如您在 ASP 和 COM 之间传递对象,要确保对象执行“按值汇集”或 MBV。执行 MBV 的对象将它们自己从一个进程复制到另一个进程。这比下面一种方式好,采用这种方式时,对象仍在创建者的进程中,另外一个进程反复地调用创建进程以使用该对象。切断连接的 ADO 记录集将“按值汇集”,连接的记录集则不然。Scripting.Dictionary 不执行 MBV,且不在进程之间传递。最后,VB 程序员请注重:MBV 不通过传递参数 ByVal 获得。MBV 由原始的组件作者执行。 怎么办? 在 IIS 4.0 中,使用 ASP 低隔离级别,使用 MTS 服务器程序包。 技巧 10:使用显式选项 更重要的一点也许是,声明的变量比未声明的变量速度更快。由此,脚本在运行时每次用到未声明的变量时,按名称引用它。另一方面,声明的变量是有顺序的,要么以编译时间,要么以运行时间。以后,声明的变量都按此顺序引用。因为 Option Explicit 强制变量声明,它能确保声明所有变量,因此访问的速度也很快。 技巧 11:在子例程和函数中使用局部变量 技巧 12:将常常使用的数据复制到脚本变量中 一般来说,假如您打算不止一次访问对象数据,那么就应将数据放到脚本变量中。这种优化的主要目标是 Request 变量(Form 和 QueryString 变量)。例如,您的站点可传递一个名为 UserID 的 QueryString 变量。假设此 UserID 在特定页面上被引用 12 次。可以无须调用 Request(?UserID?) 12 次,而是在 ASP 页面最上面将 UserID 指派到一个变量。然后在该页面自始至终使用该变量。这样就省去了 11 次 COM 方式调用。 实际上,访问 COM 属性或方式的开销并没有那么大。下面举一个例子,说明某相称常见的代码(从语法上讲): Foo.bar.blah.baz = Foo.bar.blah.qaz(1)
变量 Foo 被解析为全局对象。 Set myobj = Foo.bar.blah \\\' do the resolution of blah ONCE
With Foo.bar.blah
技巧 13:避免重新确定数组的维数 下面的代码给您显示使用 Dim 和 Redim 不当的情形。 <%
技巧 14:使用响应缓冲 有两个方式启用响应缓冲。第一种,您可以使用 Internet Services Manager 为整个应用程序启用响应缓冲。我们建议采用这种方式,在 IIS 4.0 和 IIS 5.0 中默认为新的 ASP 应用程序启用响应缓冲。第二种,可以在每个 ASP 页面的接近顶端的地方加入下面的代码行,从而启用响应缓冲: <% Response.Buffer = True %>
Response.Flush (注重在上面的 1,000 行表的举例中,许多浏览器在它们看到关闭 </table> 标记之前不会开始显示表。检查您的目标浏览器是否支持。为避免这种情况,将表分成多个具有较少行的表,并在每个表之后调用 Response.Flush。较新版本的 Internet Explorer 在表完全下载之前就开始显示表,假如您指定表列宽,显示速度就会特殊快,这样做可避免强制 Internet Explorer 通过测量每个单元格的内容宽度来计算列宽。) 另一个关于响应缓冲的常见的抱怨是,当产生异常大的页面时,将占用许多服务器内存。撇开产生大页面的方式不谈,这种问题也可通过巧妙使用 Response.Flush 来加以解决。 技巧 15:批处理内嵌脚本和 Response.Write 语句 <table>
<table>
(在这一特定举例中,建立表主体的嵌套循环 (While Not rs.EOF...) 可以用仔细构建的 GetString 调用来替代。) 技巧 16:假如页面需要很长时间才能完成,那么执行前使用 Response.IsClientConnected 假如页面要花很长时间才能执行完,也可以不时地检查 Response.IsClientConnected。当启用了响应缓冲时,最好不时地执行 Response.Flush,以用户知道,正在发生什么事。 注重 在 IIS 4.0 上,除非先执行了 Response.Write,否则 Response.IsClientConnected 就不能正常工作。假如启用了缓冲,您也必须执行 Response.Flush。在 IIS 5.0 上,却没有必要这样做,- Response.IsClientConnected 工作正常。在任何情况下,Response.IsClientConnected 都会有一些开销,因此只有在一个操作至少要花(比方说) 500 毫秒(假如您想维持每秒钟数十页的吞吐量,这是一个很长的时间)才使用它。经验表明,不要每次重复执行紧密循环时都调用它,如显示表的许多行时 - 每隔二十或五十行调用一次可能比较合适。 技巧 17:使用 <OBJECT> 标记例示对象 这又是一个惰性计算的例子。 技巧 18:对于 ADO 和其它组件使用 TypeLib 声明 IIS 5.0 引入了绑定到组件类型库的功能。这可使您引用类型库一次,并将其用在每个 ASP 页面上。每个页面不会产生编译常量文件的开销,且组件开发人员不必建立 VBScript#_include 文件以在 ASP 上使用。 要访问 ADO TypeLib,将下面一条语句放在 Global.asa 中。 <!-- METADATA NAME=?Microsoft ActiveX Data Objects 2.5 Library?
<!-- METADATA TYPE=?TypeLib?
人们已经进行了大量的工作,开发“独立于浏览器”的 HTML。正是由于这种忧虑,开发人员不愿再使用流行的浏览器功能,但这些功能本可以改善性能。对于一些真正的高性能站点,必须关心浏览器“访问”问题,一个好的策略是优化页面,使其适应流行的浏览器。使用浏览器功能组件,可以在 ASP 中方便地检测到浏览器功能。Microsoft FrontPage 等工具有助于设计适合于浏览器和指定 HTML 版本的代码。参见 When is Better Worse?Weighing the Technology Trade-Offs,以了解更进一步的讨论。 技巧 20:避免在循环语句中使用字符串串联 s = ?<table>? & vbCrLf While Not rs.EOF s = s & vbCrLf & ?</table>? & vbCrLf
s = ??
在上面的记录集举例中,假如有 100 个记录和 5 个字段,内循环将执行 100*5 = 500 次,所有的复制和重新分配所花的时间与 500*500 = 250,000 成正比。这对于中等大小的记录集来说复制操作太多了。 在本例中,代码可以用 Response.Write() 或内嵌脚本 (<% = fld.Value %>) 替代字符串串联来改进。假如启用了响应缓冲的话(应该的),这样做就会更快,因为 Response.Write 只将数据附加到响应缓冲的末尾。并不涉及重新分配,因此效率很高。 在将 ADO 记录集转变为 HTML 表的特定情况下,应考虑使用 GetRows 或 GetString。 假如在 JScript 中串联字符串,特殊建议使用 += 运算符,即,使用 s += ?某字符串?,而不使用 s = s + ?某字符串?。 技巧 21:启用浏览器和代理缓存 哪一种动态页面可作为要缓存的页面呢?下面举一些例子: 天气预告页面,在此页面上,每隔 5 分钟更新一次天气预告。 浏览器缓存由 HTTP“过期”报头控制,该报头由 Web 服务器发送给浏览器。ASP 提供两个简朴的机制发送此报头。要设置页面使其过多少分钟后到期,则应设置 Response.Expires 属性。下面的例子告诉浏览器内容在 10 分钟内过期: <% Response.Expires = 10 %>
<% Response.ExpiresAbsolute = #May 31,2001 13:30:15# %>
<META HTTP-EQUIV=?Expires? VALUE=?May 31,2001 13:30:15?>
<% Response.CacheControl = ?Public? %>
技巧 22:尽可能使用 Server.Transfer 代替 Response.Redirect 另请参见 Leveraging ASP in IIS 5.0,了解 IIS 5.0 和 ASP 3.0 新功能的完整列表。 技巧 23:在目录 URL 中使用后斜杠 例如,写: <a href=?http://msdn.microsoft.com/workshop/? title=?MSDN Web
技巧 24:避免使用服务器变量 决不要访问非限定的 Request 对象(例如,Request(\"Data\"))。对于不在 Request.Cookies、Request.Form、Request.QueryString 或 Request.ClientCertificate 中的项目,则隐式调用 Request.ServerVariables。Request.ServerVariables 集合比其它集合慢得多。 技巧 25:升级到最新和最精彩的 假如目前还不能升级到 Windows 2000,您可以升级到 SQL Server、ADO、VBScript 和 JScript、MSXML、Internet Explorer 和 NT 4 Service Packs 的最新版本。它们均可提高性能和可靠性。 技巧 26:优化 Web 服务器 有关较好的参考资料,参见下面的优化 IIS。 最佳的配置设置取决于(其中一些因素)应用程序代码、运行所在的系统硬件和客户机工作负荷。找到最佳设置的唯一方式是进行性能测试,这是我们在下一个技巧中所要讨论的。 技巧 27:进行性能测试 许多人使用单个浏览器哀求页面,来测试 Web 站点的性能。这样做就会给您一个感觉,即站点的响应能力很好,但这样做实际上并不能告诉您在负载条件下站点的性能如何。 一般情况下,要想正确地测试性能,您需要一个专门的测试环境。此环境应包括硬件,其处理器速度、处理器数量、内存、磁盘、网络配置等方面与生产环境的硬件相似。其次,您必须指定客户机的工作负荷:有多少同时的用户,他们发出哀求的频率,他们点击页面的类型等等。假如您没有站点实际使用情况的数据,您必须估计一下使用的情况。最后,您需要一个可以模仿预期客户机工作负荷的工具。有了这些工具,您就可以开始回答诸如“假如我有 N 个同时的用户,那么需要多少服务器?”之类的问题。您还可以找出出现瓶颈的原因,并以此为目标进行优化。 下面列出了一些好的 Web 负载测试工具。我们特殊推荐 Microsoft Web Application Stress (WAS) 工具包。WAS 可使您记录测试脚本,然后模仿数百或成千上万个用户访问 Web 服务器。WAS 报告很多统计信息,包括每秒钟的哀求数,响应时间分布情况和错误计数。WAS 有丰富的客户机界面和基于 Web 的界面两种,Web 界面可使您进行远程测试。 一定要阅读 IIS 5.0 Tuning Guide。 技巧 28:阅读资源链接 资源 优化 IIS ADO 和 SQL Server
词典组件 会话状态
工具 书目
ASP 样式 XML
Got Any Cache? Nancy Winnick Cluts 著 Maximizing the Performance of Your Active Server Pages,Nancy Winnick Cluts 著 15 Seconds: Performance Section Enhancing Performance in ASP - Part I,Wayne Plourde 著 When is Better Worse? Weighing the Technology Trade-Offs,Nancy Winnick Cluts 著 Speed and Optimization Resources,Charles Carroll 著 优化 IIS Leveraging ASP in IIS 5.0,J.D. Meier 著 Tuning IIS 4.0 for High Volume Sites,Michael Stephenson 著 Tuning Internet Information Server Performance,Mike Moore 著 Navigating the Maze of Settings for Web Server Performance Optimization,Todd Wanke 著 Managing Internet Information Server 4.0 for Performance,Hans Hugli 著 ADO 和 SQL Server Improve the Performance of your MDAC Application,Suresh Kannan 著 Pooling in the Microsoft Data Access Components,Leland Ahlbeck 和 Don Willits 合著 SQL Server: Performance Benchmarks and Guides Improving the Performance of Data Access Components with IIS 4.0,Leland Ahlbeck 著 Microsoft Data Access Components (MDAC) and ActiveX Data Objects (ADO) Performance Tips,Leland Ahlbeck 著 Microsoft SQL Server 7.0 Practical Performance Tuning and Optimization - The Server Perspective,Damien Lindauer 著 Microsoft SQL Server 7.0 Practical Performance Tuning and Optimization - The Application Perspective,Damien Lindauer 著 Accessing Recordsets over the Internet,Dino Esposito 著 ASP 组件和线程模型 Q243548: INFO: Design Guidelines for VB Components under ASP Threading Models Explained,Nancy Winnick Cluts 著 So Happy Together? Using ActiveX components with Active Server Pages,Nancy Winnick Cluts 著 Developing Active Server Components with ATL,George Reilly 著 Agility in Server Components,Neil Allain 著 Building High-Performance Middle-Tier Components with C++,Jon Flanders 著 Active Server Pages and COM Apartments,Don Box 著 House of COM: Active Server Pages,Don Box 著 House of COM: Contexts,Don Box 著 House of COM: Performance Trade-offs of the Windows 2000 Component Execution Environment,Don Box 著 Building COM Components That Take Full Advantage of Visual Basic and Scripting,Ivo Salmre 著 Component Design Principles for MTS 词典组件 Abridging the Dictionary Object: The ASP Team Creates a Lookup-Table Object,Robert Carter 著 Caprock Dictionary Site Server Commerce Edition includes a dictionary component 会话状态 Q157906: HOWTO: How To Maintain State Across Pages with VBScript XML-based Persistence Behaviors Fix Web Farm Headaches,Aaron Skonnard 著 House of COM: Stateless Programming,Don Box 著 性能和扩展性 Server Performance and Scalability Killers,George Reilly 著 Microsoft Visual Studio Scalability Center Fitch & Mather Stocks 2000 Tuning the FMStocks Application High-Performance Visual Basic Apps,Ken Spencer 著 Duwamish Books,Phase 4 Top Windows DNA Performance Mistakes and How to Prevent Them,Gary Geiger 和 Jon Pulsipher 合著 Building from Static HTML to High-Performance Web-Farms,Shawn Bice 著 工具 I Can\\\'t Stress It Enough -- Load Test Your ASP Application,J.D. Meier 著 Windows DNA Performance Kit Monitoring Events in Distributed Applications Using Visual Studio Analyzer,Mai-lan Tomsen 著 书目 Microsoft Internet Information Services 5.0 Resource Guide(与 Windows 2000 Server Resource Kit 在一起),Microsoft Press。 Microsoft Internet Information Server Resource Kit(用于 IIS 4.0),Microsoft Press。 Programming Distributed Applications with COM and Microsoft Visual Basic 6.0,Ted Pattison 著,Microsoft Press。 Effective COM,Don Box、Keith Brown、Tim Ewald 和 Chris Sells 合著;Addison-Wesley。 Developing Web Usability: The Practice of Simplicity,Jakob Nielsen 著,New Riders。 ASP Web 站点 LearnASP.com 4GuysFromRolla.com 15Seconds.com AspToday.com Asp101.com AspLists.com。许多专业的邮件列表包括: Fast Code! ASP 样式 ASP Quick Lessons,Charles Carroll 著 Planning for ASP,John Meade 著 ASP Guidelines,J.D. Meier 著 XML Inside MSXML3 Performance,Chris Lovett 著 返回类别: 教程 上一教程: asp性能测试报告(转)(八) 下一教程: asp性能测试报告(转)(四) 您可以阅读与"微软建议的ASP性能优化28条守则"相关的教程: · 最优化ASP程序性能 · 最大限度优化你的Asp性能 · 最大限度优化你的Asp性能 · 优化ASP程序 · 如何增强ASP程序性能(4) |
![]() ![]() |
快精灵印艺坊 版权所有 |
首页![]() ![]() ![]() ![]() ![]() ![]() ![]() |