• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    ASP编码必备的8条原则

    ASP是Active Server Page的缩写,意为“动态服务器页面”。ASP是微软公司开发的代替CGI脚本程序的一种应用,它可以与数据库和其它程序进行交互,是一种简单、方便的编程工具。在这里仅就代码优化进行一些简单讨论。

    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_ID100"  
    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目录下面。下面列举几个常用的游标类型和锁定类型。

    游标类型:

    锁定类型:

    !--#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 inbr>"  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.NET-基础篇
    • 防范ASP木马的十大基本原则强列建议看下
    • 服务器XMLHTTP(Server XMLHTTP in ASP)基础知识
    • Jquery Autocomplete 结合asp.net使用要点
    • ASP.NET中实现文件的保护性下载基础篇
    • ASP.NET笔记之Session、http、web开发原则、xss漏洞的详细介绍
    • asp对复杂json的解析一定要注意要点
    • ASP新手必备的基础知识
    上一篇:ASP动态网页制作技术经验分享
    下一篇:ASP程序中常用的脚本语言
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    ASP编码必备的8条原则 ASP,编码,必备,的,8条,原则,