共用有助于增加这一方式的有效性。通过共用,多个用户能够共享资源,而且等待时间最少,对服务器的影响也最小。例如,在处理数据库时,ODBC 连接共用和 OLEDB 资源共用可以实现从共用池中选择连接,最大程度地减少连接数据库的开销。
有关共用 ADO 的详细信息,请参阅“Pooling in Microsoft Data Access Components”(英文)。
原则 5:使用数据库维护复杂的状态
尽管 HTTP 协议是无状态的,ASP 开发人员还是会经常使用 ASP 功能内置的状态保持机制。例如,使用 ASP 技术内置的 Application 对象,开发人员所保存的资源能够为应用程序的所有用户共享。通过使用 ASP 内置的 Session 对象,开发人员只为单个用户保存资源。
尽管听起来在 ASP 技术的 Session 对象中保存信息是一个非常方便的保持状态的方式,然而这一方式付出的代价太大,而且它也可能成为对可伸缩性的最大的限制因素之一。应用程序的可伸缩性本质上是随着用户数目的增长能够继续保持其性能的能力。而对于每一用户,在会话超时或被放弃之前,Session 对象都会消耗服务器的资源。会话还会将您捆绑到一台服务器上,从而限制您利用 Web 集群的功能。请尽可能不要使用 ASP Session 对象进行状态管理。如果您完全没有使用会话,您就可以禁用 Web 应用程序的 Session 状态(请参阅 IIS 文档)。否则,您可以使用下述语句,针对每一页禁用 Session 状态:
<%@ENABLESESSIONSTATE=False %>
对于一些简单的数据,您可以使用 QueryString cookie 或隐藏的窗体域保持 ASP 请求间的状态。然后,对于更为复杂的信息,通常推荐您使用数据库。一般所采用的方式是生成某一特有的标识符,然后发送到每一个发出请求的客户机,并保存为隐藏的窗体域。在随后的请求中,这一特有的标识符被用于在数据库中查找与该用户相关的状态信息。这一方式提供了更高的可伸缩性和更为简洁明了的代码。
有关使用 QueryString cookie 和隐藏的窗体域的详细信息,请参阅“Q175167 HOWTO: Persisting Values Without Sessions”(英文)。
原则 6:使用 Server.CreateObject 创建对象
在创建 ASP 技术的对象时,您可以选择 <OBJECT> 标记、Server.CreateObject 和 CreateObject 三种方式。每项技术的行为略有不同。尽管在 IIS 4.0 中,使用 <OBJECT> 标记或 CreateObject 比 Server.CreateObject 略具性能优势,我们一般还是推荐使用 Server.CreateObject, 以便于 ASP 应用程序认知您的对象。(注意在 IIS 5.0 中,前两项与 Server.CreateObject 相比,已经没有性能优势。)
<OBJECT> 标记仅在调用第一个方法时才会创建组件,因此能够节省资源。