ASP代码的一些优化技巧

来源:互联网 发布:shop域名的收藏价值 编辑:程序博客网 时间:2024/04/29 07:31
脚本
• 在ASP程序行首使用Option Explicit
不声明VBScript的变量会加重了服务器的解析负担,进而影响服务器的响应请求速度。为加快速度和方便调试,建议强制进行变量声明。
• 多支选择尽量使用Select Case,避免使用If……ElseIf……ElseIF……End If。使用case语句,可以使程序流程化,执行起来也比if语句来
的快。
• 如果不是别无选择,否则不要使用strPage=Request("page")的这样的形式来获取参数,因为这将按顺序搜索全部的集合—QueryString、Form、Cookies、ClientCertificate、ServerVarible直到发现第一个匹配值的名称。这样做比直接访问适当的集合效率低,并且是不安全的,除非能绝对保证这个值不会出现在另外一个集合中。 
例如,可能希望搜索满足客户请求的WEB服务器名称,这通过出现在每个查询中的Request.ServerVarables集合中寻找“SERVER_NAME”来实现
。然而,假如其他的集合也包含名为“SERVER_NAME”的值(键名不区分大小写),当使用Request("server_Name")时,就会得到错误的结果。

总而言之,应尽可能直接访问适当的集合。

• 在一个页里。如果要多处使用Request.Form("a"),应当把Request.Form赋给一个变量,在页面中多处引用这个变量而不是这个集合。同样,对于rs("a")这样的集合也应当如此。


[数据库]

• 仅选择所需的列。当打开记录集时,不要自动地使用表名(即Select *),除非需要获得所有的列。使用单独的列意味着将减少发送到服务器

或从服务器取出的数据的数量。即使需要使用全部列,单独地命名每个列也会获得最佳的性能,因为服务器不必再解释这些列是什么名字。

• 尽可能使用存储过程。存储过程是预先编译的程序,含有一个已经准备好的执行计划,所以比S Q L语句执行得更快。

• 使用存储过程更改数据。这总是比在记录集上使用A D O方法执行速度快。

• 除非必需否则不要创建记录集。运行操作查询时,要确定加入了adExecuteNoRecords选项,这样记录集就不会创建。当仅仅返回一个或两个

字段的单行记录时(比如I D值),也可以在查询状态下使用这种方法。在这种情况下,存储过程和输出参数将会更快。
具体语法:
conn.Execute Sql,,adCmdText + adExecuteNoRecords

• 使用适当的光标和锁定模式。如果所做的全部工作是从记录集中读取数据,并将其显示在屏幕上(比如,创建一个表),那么使用缺省的只能

前移的、只读的记录集。A D O用来维护记录和锁定细节的工作越少,执行的性能就越高。

• 当遍历记录集时一个保证能提高性能的方法是使用对象变量指向集合中的成员。
例如,
考虑下面的遍历记录集的例子。
可以用下面的方法加速代码执行,同时使其更易于理解。
Dim rs,Sql
Server.CreateObject("ADODB.RecordSet")
Sql = "Select a,b FROM db_name orDER BY a DESC"
rs.open Sql,conn,1,1
If rs.Eof and rs.Bof Then
Response.Write("无记录")
Response.End
Else
Dim a,b 
Set a = rs(0)
Set b = rs(1)
Do While Not rs.Eof
Response.Write("a=" & a & ";b=" & b)
rs.MoveNext
Loop
End If
这里使用了两个变量,并指向记录集的rs集合中的特定字段。因为这里建立了一个对象的引用,所以可以使用对象变量而不是实际的变量,这意味着脚本引擎的工作减少了,因为在集合中进行索引的次数变少了。

关于ado常数

要在Asp中使用ado常数,有两种办法。
这种方法的缺点是会造成页面过大。
一个比较好的解决的方法是创建一个对类型库的引用,这种方法不需要将常数包含进ASP文件而直接可以引用常数:

打开记录集时,可以定义记录集打开的游标类型和锁定类型。在adovbs.inc文件中定义了一些常量来定义这些类型。adovbs.inc文件保存在
C:/ProgramFiles/Common Files/System/ado目录下面。

关于RS.OPEN SQL,CONN,A,B

A(游标类型): 

ADOPENFORWARDONLY(=0) 
只读,且当前数据记录只能向下移动

ADOPENKEYSET(=1) 
只读,当前数据记录可自由移动

ADOPENDYNAMIC(=2) 
可读写,当前数据记录可自由移动

ADOPENSTATIC(=3) 
可读写,当前数据记录可自由移动,可看到新增记录

B(锁定类型):

ADLOCKREADONLY(=1) 
缺省锁定类型,记录集是只读的,不能修改记录

ADLOCKPESSIMISTIC(=2) 
悲观锁定,当修改记录时,数据提供者将尝试锁定记录以确保成功地编辑记录。只要编辑一开始,则立即锁住记录。

ADLOCKOPTIMISTIC(=3) 
乐观锁定 ,直到用Update方法提交更新记录时才锁定记录。

ADLOCKBATCHOPTIMISTIC(=4) 
批量乐观锁定,允许修改多个记录,只有调用UpdateBatch方法后才锁定记录。

当不需要改动任何记录时,应该使用只读的记录集,这样提供者不用做任何检测。
对于一般的使用,乐观的锁定可能是最好的选择,因为记录只被锁定一小段时间,
数据在这段时间被更新。这减少了资源的使用。 

高级

为了代码重用和网站程序维护。尽量使用类和函数封装。在任何一个可能出现重复代码的地方,都可以考虑用类或函数来实现,而不是简单地Copy代码。
 
原创粉丝点击