电脑爱好者,提供IT资讯信息及各类编程知识文章介绍,欢迎大家来本站学习电脑知识。 最近更新 | 联系我们 RSS订阅本站最新文章
电脑爱好者
站内搜索: 
当前位置:首页>> Asp>>Asp编码优化技巧8则_提交运行效率:

Asp编码优化技巧8则_提交运行效率

来源:网络 | 2007-2-3 | (有1591人读过)

1.声明VBScript变量 

在ASP中,对VBScript提供了强劲的支持,能够无缝集成VBScript的函数、方法,这样给扩展ASP的现有功能提供了很大便利。由于ASP中已经模糊了变量类型的概念,所以,在进行ASP与VBScript交互的过程中,很多程序员也惯于不声明VBScript的变量,这样加重了服务器的解析负担,进而影响服务器的响应请求速度。 
鉴于此,我们可以象在VB中强制用户进行变量声明一样在VBScript中强制用户进行变量声明。实现方法是: 
在ASP程序行首放置<% option explicit%>。 

2.对URL地址进行编码 
在我们使用ASP动态生成一个带参数URL地址并进行跳转时,在IE中解析很正常,但在NetScrape浏览时却有错误如下: 
HTTP Error 400 
400 Bad Request 
Due to malformed syntax, the request could not be understood by the server. 
The client should not repeat the request without modifications. 
解决方法是对生成的URL参数使用ASP内置server对象的URLencode方法进行URL编码,例子如下: 
<% 
URL="xur.asp" 
var1="username=" & server.URLencode("xur") 
var2="&company=" & server.URLencode("xurstudio") 
var3="&phone=" & server.URLencode("021-53854336-186") 
response.redirect URL & "?" & var1 & var2 & var3 
%> 

3.清空对象 
当使用完对象后,首先使用Close方法来释放对象所占用的系统资源;然后设置对象值为“nothing”释放对象占用内存。下面的代码使用数据库内容建立一个下拉列表。代码示例如下: 
<% myDSN="DSN=xur;uid=xur;pwd=xur" 
mySQL="select * from authors where AU_ID<100" 
set conntemp=server.createobject("adodb.connection") 
conntemp.open myDSN 
set rstemp=conntemp.execute(mySQL) 
if rstemp.eof then 
response.write "数据库为空" 
response.write mySQL 
conntemp.close 
set conntemp=nothing 
response.end 
 end if%> 
<%do until rstemp.eof %> 
<% 
rstemp.movenext 
loop 
rstemp.close 
set rstemp=nothing 
conntemp.close 
set conntemp=nothing 
%> 

4.使用字符串建立SQL查询 
使用字符串来建立查询并不能加快服务器的解析速度,相反,它还会增加服务器的解析时间。但在这里仍然推荐使用字符串代替简单的查询语句来进行查询。这样做的好处是,可以迅速发现程序问题所在,从而便利高效地生成程序。示例如下: 
<%mySQL= ""select * " 
mySQL= mySQL & "from publishers" 
mySQL= mySQL & "where state=’NY’" 
response.write mySQL 
set rstemp=conntemp.execute(mySQL) 
rstemp.close 
set rstemp=nothing 
%> 

5.使用case进行条件选择 
在进行条件选择的时候,尽量使用case语句,避免使用if语句。使用case语句,可以使程序流程化,执行起来也比if语句来的快。示例如下: 
<% 
  FOR i = 1 TO 1000 
   n = i 
   Response.Write AddSuffix(n) & "<br>" 
  NEXT 
  %> 
  <% 
  Function AddSuffix(num) 
numpart = RIGHT(num,1) 
SELECT CASE numpart 
CASE "1" 
IF InStr(num,"11") THEN 
num = num & "th" 
ELSE 
num = num & "st" 
END IF 
CASE "2" 
IF InStr(num,"12") THEN 
num = num & "th" 
ELSE 
num = num & "nd" 
END IF 
CASE "3" 
IF InStr(num,"13") THEN 
num = num & "th" 
ELSE 
num = num & "rd" 
END IF 
CASE "4" 
num = num & "th" 
CASE ELSE 
num = num & "th" 
END SELECT 
AddSuffix = num 
  END FUNCTION 
%> 

6.使用adovbs.inc文件中定义的常量打开记录集 
打开记录集时,可以定义记录集打开的游标类型和锁定类型。在adovbs.inc文件中定义了一些常量来定义这些类型。adovbs.inc文件保存在\inetpub\iissamples\IISamples目录下面。下面列举几个常用的游标类型和锁定类型。 
游标类型:adOpenFowardOnly游标只能向前;adOpenKeyset游标可向前或者向后,如一用户添加记录,新记录不会出现在记录集中;adOpenDynamic游标动态随意;adOpenStatic记录集不对其他用户造成的记录修改有所反映。 
锁定类型:adLockReadOney不能修改记录集中的记录;adLockPessimistic在编辑一条记录时锁定它;adLockOptimstic调用记录集Update方法时才锁定记录;adLockBatchOpeimstic记录只能成批更新。 
<!--#INCLUDE VIRTUAL="/ADOVBS.INC" --> 
<% 
connectme="DSN=xur;uid=xur;pwd=xur" 
sqltemp="select * from publishers where name=’xur’" 
set rstemp=Server.CreateObject("adodb.Recordset") 
rstemp.open sqltemp, connectme, adOpenStatic,adLockOptimstic 
response.write rstemp.recordcount & " records in<br>" & sqltemp 
rstemp.close 
set rstemp=nothing 
%> 

7.避免在使用global.asa文件中进行对象定义 
由于global.asa文件中的内容可以为站点内所有文件引用,无疑,在global.asa文件中进行对象定义可以省去很多重复工作。比如在global.asa中的application_onstart函数中进行如下定义: 
<%SUB application_onstart 
set application("theCONN")=server.createobject("adodb. connection") 
END SUB %>; 
这样就可以在站点任何代码中做类似引用: 
<% 
mySQL="select * from publishers where state=’xur’ 
set rstemp=application("theconn").execute(mySQL) 
%> 
同样地,可以在session_onstart函数中创建记录集对象 
<%SUB session_onstart 
set session("rstemp")=server.createobject("adodb.recordset") 
END SUB %> 
然后在站点也面中进行如下引用: 
<% 
mySQL="select * from publishers where state=’xur’ 
set session("rstemp")=conntemp.execute(mySQL) 
%> 
但这样做的同时也有很大的负面影响,由于Application和Session变量都只有在关闭网站的时候才释放占用的资源,所以Session参数会浪费大量不必要内存,而且此时Application变量成为服务器性能的瓶颈。 
解决方法:建立定义对象ASP页面,在需要进行调用这些对象的页面上,引入这张ASP页面。假设定义对象的ASP页面名称为define.asp,则只要在对应ASP页面中加入以下语句就能引入该页面。 
<!--#INCLUDE VIRTUAL="/define.asp" --> 
在进行页面引进时,最好在待引进的ASP文件中不要包含<%@LANGUAGE="VBSCRIPT"%>语句。因为在ASP文件中,只能有一句由@来定义的脚本解析语言。 

8.安全防护 
ASP提供了很好的代码保护机制,所有的ASP代码都在服务器端执行而只返回给客户端代码执行结果。即便这样,在老版本的IIS中还可以在文件名后面加::$DATA来查看ASP的源代码,这已经属于Web Server安全范畴不在本文讨论范围内。下面提出两点简单的安全注意事项。 
虽然在ASP中建议引入文件以inc作为扩展名,在这里仍建议以ASP作为引文件的扩展名。当这些代码在安全机制不好的Web Server上运行时,只需在地址栏上输入引入文件的地址(inc为扩展名),就可以浏览该引入文件的内容,这是由于在Web Server上,如果没有定义好解析某类型(比如inc)的动态连接库时,该文件以源码方式显示。 
不要把数据库文件放在网站结构内部,这样,当恶意人士获取数据库路径后,就可以轻易获取该数据库,进而肆意更改数据库内容。比较好的做法是,为数据库建立DSN(Date Source Name),而在进行数据库访问时直接访问该DSN。 
Asp热门文章排行
网站赞助商
购买此位置

 

关于我们 | 网站地图 | 文档一览 | 友情链接| 联系我们

Copyright © 2003-2019 电脑爱好者 版权所有 备案号:鲁ICP备09059398号