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。

时间: 2024-10-12 21:32:00

asp优化:Asp编码优化技巧8则的相关文章

asp优化:ASP提速技巧

技巧之一:提高使用Request集合的效率 访问一个ASP集合来提取一个值是费时的.占用计算资源的过程.因为这个操作包含了一系列对相关集合的搜索,这比访问一个局部变量要慢得多.因此,如果打算在页面中多次使用Request集合中的一个值,应该考虑将其存贮为一个局部变量.例如将代码写成下面的形式以加快脚本引擎处理速度: strTitle=Request.Form("Title") strFirstName=Request.Form("FirstName") strLas

OutputCache缓存优化asp.net代码 提高网页性能

对于asp.net编写的网页来说,使用缓存是一种非常重要也是很常用的优化技术,它可以大大减轻服务器的负载压力,优化这些网页的性能,在网与使用 .NET Framework 的任何其他功能相比,适当地使用缓存可以更好地提高站点的性能.同时,在网页加速显示上也起了很大的作用. OutputCache以声明的方式控制 ASP.NET 页或页中包含的用户控件的输出缓存策略. 语法: <%@ OutputCache Duration="#ofseconds"   Location=&quo

不修改代码就能优化ASP.NET网站性能的一些方法

阅读目录 开始 配置OutputCache 启用内容过期 解决资源文件升级问题 启用压缩 删除无用的HttpModule 其它优化选项 本文将介绍一些方法用于优化ASP.NET网站性能,这些方法都是不需要修改程序代码的.它们主要分为二个方面:1. 利用ASP.NET自身的扩展性进行优化.2. 优化IIS设置. 回到顶部 配置OutputCache 用缓存来优化网站性能的方法,估计是无人不知的. ASP.NET提供了HttpRuntime.Cache对象来缓存数据,也提供了OutputCache指

小图示优化 - ASP.NET Sprite and Image Optimization (Web Form)

小图示优化 - ASP.NET Sprite and Image Optimization (Web Form) 透过 NuGet安装下面的套件,可以将您的小图示(icon)合并成一张图 透过 CSS Sprites的方式,减少浏览器跟Web Server之间的图档传递,藉此增加效率. 您常看见的 Google 涂鸦(特定节日,Google的标示会有一段动画) 也会用到这样的效果喔! 关于 CSS Sprites可以参阅下面两篇中文文章的说明: http://www.techbang.com/p

Android最佳性能实践(三)——高性能编码优化

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/42318689 在前两篇文章当中,我们主要学习了Android内存方面的相关知识,包括如何合理地使用内存,以及当发生内存泄露时如何定位出问题的原因.那么关于内存的知识就讨论到这里,今天开始我们将学习一些性能编码优化的技巧. 这里先事先提醒大家一句,本篇文章中讨论的编码优化技巧都是属于一些"微优化",也就是说即使我们都按照本篇文章的技巧来优化代码,在性能方面也是看不出有什么

ASP.NET中Gridview一些技巧

ASP.NET中Gridview一些技巧 一.后台覆盖掉Gridview中自动填充的值 我们可以再Gridview中的事件触发的过程中修改其中的值,而这些值将会在具体的运行过程中覆盖掉那些自动属性.这样我们就可以快捷高效的使用VS中的Gridview控件的同时,又增加一定的自主性和可操作性. 例如: ItemInserting事件:数据在插入数据库之前会触发这个事件. 如果主键是Guid类型的,就可以在此事件内处理:生成一个Guid数据,然后赋值给e.Values[“Id”]. protecte

IOS 性能优化的建议和技巧

IOS 性能优化的建议和技巧 本文来自iOS Tutorial Team 的 Marcelo Fabri,他是Movile的一名 iOS 程序员.这是他的个人网站:http://www.marcelofabri.com/,你还可以在Twitter上关注@marcelofabri_. 性能对 iOS 应用的开发尤其重要,如果你的应用失去反应或者很慢,失望的用户会把他们的失望写满App Store的评论.然而由于iOS设备的限制,有时搞好性能是一件难事.开发过程中你会有很多需要注意的事项,你也很容易

关于项目优化的一些小技巧

1.若项目能编译成功,但有错误提示时,可以用清理缓存的方式解决. 就是把/Users/用户名/Library/Developer/Xcode/DerivedData文件全部删除.但要注意的是删除前要关闭项目,否则该问题仍存在. 2.利用NSData读取文件 NSData读取文件时分两种形式,通过网络读取和本地读取.二者不能混淆,否则会导致nil问题 //读取本地文件 NSData *dataTemp = [NSData dataWithContentsOfFile:@"/Volumes/IMG_

高效C#编码优化

1.foreach VS for 语句 Foreach 要比for具有更好的执行效率Foreach的平均花费时间只有for的30%.通过测试结果在for和foreach都可以使用的情况下,我们推荐使用效率更高的foreach另外,用for写入数据时间大约是读取数据时间的10倍左右. 2.避免使用ArrayList ArrayList的性能低下任何对象添加到ArrayList中都要封箱为System.Object,从ArrayList中取出数据都要拆箱回实际的类型 泛型集合类的高性能,泛型集合是强

关于asp.net 开发的小技巧—让传值对象化

前端:前端 定义一个对象, 传值时实例此对象,序列化成json字符串 代码如下: 定义js对象: ///定义一个查询条件对象 var SearchCondition=function(){ this.Code=$("#Code").val(); this.ProjectID=$("#Project").val(); this.CustomerID=$("#Customer").val(); }; 序列化 $("#search"