Asp编程优化技巧八则

来源:我要学习网  作者:本站整理
摘要:ASP(ActiveServerPage)作为Microsoft公司推出的基于PWS(PersonalWebServer)&IIS(InternetInformationServer)平台的、基于ISAPI(InternetServiceAPI)原理的…

     
     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文件中不要包含<%@LANGUAG="VBSCRIPT"%>语句。因为在asp文件中,只能有一句由@来定义的脚本解析语言。
 
     8、安全防护

asp提供了很好的代码保护机制,所有的asp代码都在服务器端执行而只返回给客户端代码执行结果。即便这样,在老版本的IIS中还可以在文件名后面家::$DATA来查看asp的源代码,这已经属于Web Server安全范畴不在本文讨论范围内。下面提出两点简单的安全注意事项。

虽然在asp中建议引入文件以inc作为扩展名,在这里仍建议以asp作为引文件的扩展名。当这些代码在安全机制不好的Web Server上运行时,只需在地址栏上输入引入文件的地址(inc为扩展名),就可以浏览该引入文件的内容,这是由于在Web Server上,如果没有定义好解析某类型(比如inc)的动态连接库时,该文件以源码方式显示。

不要把数据库文件放在网站结构内部,这样,当恶意人士获取数据库路径后,就可以轻易获取该数据库,进而肆意更改数据库内容。比较好的做法是,为数据库建立DSN(Date Source Name),而在进行数据库访问时直接访问该DSN。

【相关文章】好搜一下
小方法大作用:如何让网站PR值一路高歌

小方法大作用:如何让网站PR值一路高歌

做网站最痛苦的就是建站之初的那段时间,如长沙厂房出租网站刚建立,只是处于婴幼儿时…