技巧之一提高使用Request集合的效率
访问一个ASP集合来提取一个值是费时的占用计算资源的过程因为这个操作包含了一系列对相关集合的搜索这比访问一个局部变量要慢得多因此如果打算在页面中多次使用Request集合中的一个值应该考虑将其存贮为一个局部变量例如将代码写成下面的形式以加快脚本引擎处理速度
strTitle=RequestForm(Title)
strFirstName=RequestForm(FirstName)
strLastName=RequestForm(LastName)
If Len(strTitle) Then strTitle=strTitle &
If strFirstName= Then strFullName=strTitle & & strLastName
Elseif Len(strFirstName)= Then
strFullName=strTitle & strFirstName & & strLastName
Else
strFullName=strTitle & strFirstName & & strLastName
End If
技巧之二直接访问适当的集合
如果不是别无选择否则不要使用strPage=Request(page)的这样的形式来获取参数因为这将按顺序搜索全部的集合—QueryStringFormCookiesClientCertificateServerVarible直到发现第一个匹配值的名称这样做比直接访问适当的集合效率低并且是不安全的除非能绝对保证这个值不会出现在另外一个集合中
例如可能希望搜索满足客户请求的WEB服务器名称这通过出现在每个查询中的RequestServerVarables集合中寻找SERVER_NAME来实现然而假如其他的集合也包含名为SERVER_NAME的值(键名不区分大小写)当使用Request(server_Name)时就会得到错误的结果总而言之应尽可能直接访问适当的集合
技巧之三在费时操作前使用ResponseIsClientConnected属性
使用ResponseIsClientConnected是观察用户是否仍连到服务器并正在载入ASP创建的网页的有用方式如果用户断开连接或停止下载我们就不用再浪费服务器的资源创建网页因为缓沖区内容将被IIS丢弃所以对那些需要大量时间计算或资源使用较多的网页来说值得在每一阶段都检查游览者是否已离线
…… Code to create first part of the page
If ResponseIsClientConnected Then
ResponseFlush
Else
ResponseEnd
End If
…… Code to create next part of page
技巧之四优化ASP中的ADO操作
通常面言数据构成了WEB站点的实际内容所以优化ADO操作以加速ASP代码执行十分有用
a 仅选择所需的列当打开ADO记录集时除非需要获得所有的列否则不应自动地使用表名(即SELECT *)使用单独的列意味着将减少发送到服务器或从服务器取出的数据量即使需要使用全部列单独地命名每个列也会获得最佳的性能因为服务器不必再解释这些列的名字
b 尽可能的使用存储过程存储过程是预先编译的程序含有一个已经准备好的执行计划所以比SQL语句执行更快
c 使用适当的光标和锁定模式如果所做的全部工作只是从记录集中读取数据并将其显示在屏幕上那么就使用缺省的只能前移只读的记录集ADO用来维护记录和锁定的细节的工作越少执行的性能就越高
d 使用对象变量当遍历记录集时一个肯定能提高性能的方法是使用对象变量指向集合中的成员例如
While Not RsGcEOF
ResponseWrite 工程名称 & RsGc(GcMC) & (工程代码 & RsGc(GcCode) & )
RsGcMoveNext
Wend
可以用改写为下面的代码以加快执行
set GcMc=RsGc(GcMc)
set GcCode=RsGc(GcCode)
While Not rsGcEOF ResponseWrite 工程名称 & GcMc & (工程代码 & GcCode & )
RsGcMoveNext
Wend
新的代码建立了对象变量的引用所以可以使用对象变量而不是实际的变量这意味着脚本引擎的工作减少了因为在集合中进行索引的次数变少了
技巧五不要混用脚本引擎
我们知道ASP页面中既可以使用VBScript也可以使用JScript但是在同一个页面上同时使用JScript和VBScript则是不可取的因为服务器必须实例化并尝试缓存两个(而不是一个)脚本引擎这在一定程度上增加了系统负担因此从性能上考虑不应在同一页面中混用多种脚本引擎