`
zhaohaolin
  • 浏览: 1018176 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

ASP代码优化1

阅读更多
ASP代码优化1
ASP(Active Server Page)是Microsoft公司推出的基于PWS(Personal Web Server)&IIS(InternetInformation Server)平台的、基于ISAPI(InternetServiceAPI)原理的动态网页开发技术,目前日趋成熟完善。在这里仅就代码优化进行一些简单讨论。

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

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的源代码,这已经属于WebServer安全范畴不在本文讨论范围内。下面提出两点简单的安全注意事项。
  虽然在asp中建议引入文件以inc作为扩展名,在这里仍建议以asp作为引文件的扩展名。当这些代码在安全机制不好的WebServer上运行时,只需在地址栏上输入引入文件的地址(inc为扩展名),就可以浏览该引入文件的内容,这是由于在WebServer上,如果没有定义好解析某类型(比如inc)的动态连接库时,该文件以源码方式显示。
  不要把数据库文件放在网站结构内部,这样,当恶意人士获取数据库路径后,就可以轻易获取该数据库,进而肆意更改数据库内容。比较好的做法是,为数据库建立DSN(DateSource Name),而在进行数据库访问时直接访问该DSN。
 
分享到:
评论

相关推荐

    ASP编程代码优化

    在ASP编程中,代码优化是提升网站性能和用户体验的关键环节。以下是对ASP编程基础语法和优化策略的详细阐述: 一、基础语法 1. **响应对象Response**:ASP中的Response对象用于向客户端发送数据,例如输出HTML文本...

    ASP.NET中错误处理代码优化--vs2003

    "ASP.NET中错误处理代码优化--vs2003"这个主题主要关注如何在ASP.NET环境中,特别是在Visual Studio 2003下,对错误处理代码进行优化,提高应用的健壮性。 1. 错误处理的重要性:错误处理是程序开发的关键环节,...

    专用 ASP 代码 调试 工具

    1. **错误检测**:工具能够识别并标记出ASP代码中的语法错误,如拼写错误、缺少的括号或引号等。这对于初学者来说特别有用,因为他们可能不熟悉所有的ASP语法规则。 2. **步进执行**:通过步进执行功能,开发者可以...

    ASP代码生成器(强大的ASP代码生成器)

    - **代码优化**:生成的代码通常会遵循最佳实践,避免常见的性能问题。 - **易于集成**:生成的ASP代码易于与其他系统或模块集成,促进项目的整体开发。 6. 使用流程:首先,配置数据库连接参数,如数据库类型、...

    asp代码解密工具

    解密后的代码可以帮助理解原有的业务逻辑,进行代码优化或迁移至新的平台。 总的来说,ASP代码解密工具是针对加密ASP代码的一种辅助工具,它能够帮助开发者揭示隐藏在加密层下的程序逻辑,以便于代码的调试、维护和...

    微软建议的20种代码优化方法

    这些建议旨在帮助开发者编写更高效、更可靠的ASP代码,提升整体系统的性能。优化不仅限于代码层面,还包括了对服务器配置、数据存储和网络通信的综合考虑。遵循这些最佳实践,可以有效地提升ASP应用的运行效率和用户...

    酒店网站 asp+access,代码优化

    1. **ASP代码优化**: - **减少冗余代码**:删除无用的变量声明、空行和注释,精简代码。 - **避免全局变量**:过度依赖全局变量可能导致内存泄漏和数据冲突,尽量使用局部变量。 - **优化循环结构**:使用更高效...

    asp 自动生成数据库操作代码

    自动生成数据库操作代码的工具则能解决这个问题,它可以根据数据库结构自动生成相应的ASP代码,使得开发者可以快速地实现数据的增删改查功能。 这些工具通常会提供以下功能: 1. **数据库连接**:自动生成连接...

    专用ASP代码调试工具

    "专用ASP代码调试工具"就是为了帮助开发者高效、准确地定位和解决ASP代码中的问题而设计的。 传统的ASP调试方法通常依赖于IIS(Internet Information Services),这是一个功能强大的Web服务器,能够运行ASP应用...

    ASP代码调试工具

    这款工具的安装过程非常简单,只需要将压缩包内的"ASP代码调试工具.exe"文件复制到你的源码文件夹内,然后双击运行,无需复杂的安装步骤,符合绿色软件的特性,即下载即用。 使用ASP代码调试工具,开发者可以: 1....

    ASP图片上传代码(非常实用的哟!)

    4. **文件存储**:验证通过后,ASP代码会将图片保存到服务器的指定目录。通常会生成一个随机或唯一的文件名,以避免文件重名问题。同时,也要考虑文件权限和安全设置,防止未授权访问。 5. **数据库记录**:为了...

    ASP代码转PHP代码V1.0

    "ASP代码转PHP代码V1.0"是一款工具,其主要功能是帮助开发者将原有的ASP代码快速地转换为PHP代码,以适应项目从ASP平台向PHP平台迁移的需求。 【ASP与PHP的差异】 1. **语法差异**:ASP主要基于VBScript或JScript...

    asp 优化版企业网站源代码

    【企业网站源代码优化】 企业网站源代码优化主要关注以下几个方面: 1. **性能优化**:通过减少HTTP请求,合并CSS和JavaScript文件,优化图片大小,使用CDN(内容分发网络)等方法来提高页面加载速度,提升用户...

    asp代码行数统计器

    使用"asp代码行数统计器"可以辅助开发者进行代码质量管理,通过比较不同阶段的代码行数变化,可以发现代码膨胀的问题,从而进行代码重构和优化。同时,它也可以帮助管理者监控项目的进展,确保项目按计划进行。总的...

    ASP代码加密大师(正式版)

    使用ASP代码加密大师的正式版,开发者可以享受到更高的代码保护级别,这可能包括更复杂的混淆策略,更严格的运行时检测,以及更好的兼容性和性能优化。同时,正式版可能还提供技术支持和更新服务,确保随着技术的...

    ASP博客制作源代码

    1. **ASP基础**:首先,你需要熟悉ASP的基本语法和概念,如Response对象用于向浏览器发送内容,Request对象用于获取客户端的请求数据,以及Server对象用于执行服务器上的方法。 2. **VBScript或JScript**:ASP通常...

    Asp.net动软代码自动生成器

    总之,Asp.NET动软代码自动生成器是一个强大且实用的工具,它结合了Asp.NET框架的特性,提供了一种高效的方式来自动化编码任务,使得开发者能够更专注于创新和优化,而不是基础的代码编写。无论你是初学者还是经验...

    ASP.NET完整项目源代码

    ASP.NET是一种由微软开发的服务器端Web应用程序框架,用于构建动态网站...通过研究这些项目,你可以学习到如何组织代码结构、如何处理用户交互、如何优化性能,以及如何利用ASP.NET的强大功能来创建复杂的Web解决方案。

    asp代码查询系统

    "ASP代码查询系统"是一种基于Active Server Pages (ASP)技术构建的在线数据查询应用程序。ASP是微软开发的一种服务器端脚本环境,用于生成动态网页。在这个系统中,用户可以通过交互式的界面来执行查询操作,获取所...

Global site tag (gtag.js) - Google Analytics