`
hududanyzd
  • 浏览: 779333 次
文章分类
社区版块
存档分类
最新评论

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建站编码优化技巧

    推荐Asp编码优化技巧8则。需要的就赶快来下载吧!!!

    ASP编码优化技巧8则

    1.声明VBScript变量在ASP中,对VBScript提供了强劲的支持,能够无缝集成VBScript的函数、方法,这样给扩展ASP的现有功能提供了很大便利。...2.对URL地址进行编码在我们使用ASP动态生成一个带参数URL地址并进行跳转时,

    Asp编码优化技巧

    8条Asp编码优化技巧: 1、声明VBScript变量   在ASP中,对vbscript提供了强劲的支持,能够无缝集成vbscript的函数、方法,这样给扩展ASP的现有功能提供了很大便利。由于ASP中已经模糊了变量类型的概念,所以,在...

    ASP编程常用的代码及常函数

    ASP编程常用的代码 Asp编码优化技巧8则 asp的19个基本技巧 一些Asp技巧和实用解决方法 ASP中正则表达式的应用 防止从外部提交数据的方法 ASP数据库语法总结

    asp学习 菜鸟秘籍

    一部教你迅速成为ASP顶尖高手的秘笈  ASP的对象结构  FileSystem和TextStream对象  Asp编码优化技巧  ASP中五种连接数据库的方法  Asp 函数介绍  网站设计中表单验证  asp自解压程序  利用asp 发信

    ASP 中级菜鸟秘籍

     ASP的对象结构  FileSystem和TextStream对象  Asp编码优化技巧  ASP中五种连接数据库的方法  Asp 函数介绍  网站设计中表单验证  asp自解压程序  利用asp 发信

    asp.net4 in C#2010

    在这些网页,你会发现“最佳做法”和密钥数据库和XML的原则,全面的讨论让你知道ASP.NET有效的技巧。该书还强调了面向对象和代码宝贵的编码技术。 读完这本书,你将掌握核心技术并拥有所有的知识,你将开始一个专业...

    asp.net知识库

    Visual Web Development 2005开发ASP.NET使用小技巧 ASP.NET 2.0 异步页面原理浅析 [1] [原] 自定义通用System.Web.UI.IHierarchicalDataSource简单实现 在 ASP.NET 2.0 中创建 Web 应用程序主题 ASP.NET 2.0 中的...

    ASP.NET MVC 3高级编程

    12.3 单元测试用于asp.net mvc应用程序的技巧和窍门 291 12.3.1 控制器测试 291 12.3.2 路由测试 296 12.3.3 验证测试 298 12.4 小结 302 第13章 扩展asp.net mvc 303 13.1 模型扩展 304 13.1.1 把请求数据...

    C#编程经验技巧宝典

    112 <br>0188 如何在ASP.NET中显示当前IE浏览器头信息 113 <br>5.6 其他应用技巧 114 <br>0189 如何判断年份是否为闰年 114 <br>0190 如何根据年份判断十二生肖 114 <br>0191 如何根据IP...

    GridView使用技巧一

    √(vs200505) 7. 数据类型二[日期类型] √(vs200506) 8. 运算符[赋值,算术]√(vs200507) 9. 数据类型转换√(vs200508) 10. 结构化数据类型[一](数组)√(vs200509) 11. 结构化数据类型[二]...

    GridView使用技巧二

    √(vs200505) 7. 数据类型二[日期类型] √(vs200506) 8. 运算符[赋值,算术]√(vs200507) 9. 数据类型转换√(vs200508) 10. 结构化数据类型[一](数组)√(vs200509) 11. 结构化数据类型[二]...

    ASP企业网络管理系统设计与实现

    对论文进行规格化装订,与指导教师进行讨论与咨询,请指导教师指导在答辩过程中有可能提出的问题,及所提出的问题应从何种角度进行回答,同时请指导教师对答辩的技能、技巧进行指导,并准备答辩演示文稿及相关材料。

    亮剑.NET深入体验与实战精要.part1.

    第1篇 技术基础总结  第1章 .net,你真的知道了吗  1.1 搞清自己是干什么的  1.2 .net的几个特性  1.3 万丈高楼平地起:面试者必会  1.4 .net的面向对象之门  1.5 .net开发几把小刀 ...附录a 软件编码规范

    亮剑.NET深入体验与实战精要.part3

    第1篇 技术基础总结  第1章 .net,你真的知道了吗  1.1 搞清自己是干什么的  1.2 .net的几个特性  1.3 万丈高楼平地起:面试者必会  1.4 .net的面向对象之门 ... 1.6 visual studio.net ...附录a 软件编码规范

    亮剑.NET深入体验与实战精要.part4(完)

    第1篇 技术基础总结  第1章 .net,你真的知道了吗  1.1 搞清自己是干什么的  1.2 .net的几个特性  1.3 万丈高楼平地起:面试者必会  1.4 .net的面向对象之门  1.5 .net开发几把小刀 ...附录a 软件编码规范

    亮剑.NET深入体验与实战精要.part2

    第1篇 技术基础总结  第1章 .net,你真的知道了吗  1.1 搞清自己是干什么的  1.2 .net的几个特性  1.3 万丈高楼平地起:面试者必会  1.4 .net的面向对象之门  1.5 .net开发几把小刀 ...附录a 软件编码规范

    亮剑.NET深入体验与实战精要2

    15.1 高效C#编码优化 526 15.2 页面(HTML)优化的方法 534 15.3 ASP.NET开发性能优化 540 15.3.1 如没必要,尽量使用静态HTML页面 540 15.3.2 避免不必要的回送操作 541 15.3.3 尽量在客户端进行用户输入验证 541 ...

Global site tag (gtag.js) - Google Analytics