您当前的位置: 首页 > 网站编程 > ASP教程 > Asp编码优化技巧8则

Asp编码优化技巧8则

作者:xiaoxiao 来源:未知 发布时间: 2013-11-25 21:57 点击:
ASP(Active Server Page)是Microsoft公司推出的基于PWS(Personal Web Server)IIS(Internet Information Server)平台的、基于ISAPI(InternetServiceAPI)原理的动态网页开发技术,目前日趋成熟完善。在这里仅就代码优化进行一些简单讨论。 1、声明VBScript变量 在ASP中,

Asp编码优化技巧8则

  ASP(Active Server Page)是Microsoft公司推出的基于PWS(Personal Web Server)&IIS(Internet Information Server)平台的、基于ISAPI(InternetServiceAPI)原理的动态网页开发技术,目前日趋成熟完善。在这里仅就代码优化进行一些简单讨论。
  
  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”释放对象占用内存。当年,我就是在一张页面上创建了百余个没有清空对象的记录集而崩溃了我的IIS 。下面的代码使用数据库内容建立一个下拉列表。代码示例如下:
  
  <% 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编码优化技巧8则"由远航站长收集整理而来,仅供大家学习与参考使用。更多网站制作教程尽在远航站长站。
顶一下
(0)
0%
踩一下
(0)
0%
[点击 次] [返回上一页] [打印]
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
关于本站 - 联系我们 - 网站声明 - 友情连接- 网站地图 - 站点地图 - 返回顶部
Copyright © 2007-2013 www.yhzhan.com(远航站长). All Rights Reserved .
远航站长:为中小站长提供最佳的学习与交流平台,提供网页制作与网站编程等各类网站制作教程.
官方QQ:445490277 网站群:26680406 网站备案号:豫ICP备07500620号-4