仓酷云

标题: ASP网页设计Asp编码优化技能八则 [打印本页]

作者: 分手快乐    时间: 2015-1-16 22:08
标题: ASP网页设计Asp编码优化技能八则
Access是一种桌面数据库,只适合数据量少的应用,在处理少量数据和单机访问的数据库时是很好的,效率也很高。但是它的同时访问客户端不能多于4个。access数据库有一定的极限,如果数据达到100M左右,很容易造成服务器iis假死,或者消耗掉服务器的内存导致服务器崩溃。ASP(ActiveServerPage)是Microsoft公司推出的基于PWS(PersonalWebServer)&IIS(InternetInformationServer)平台的、基于ISAPI(InternetServiceAPI)道理的静态网页开辟手艺,今朝日益成熟完美。在这里仅就代码优化举行一些复杂会商。
1、声明VBScript变量
在ASP中,对vbscript供应了微弱的撑持,可以无缝集成vbscript的函数、办法,如许给扩大ASP的现有功效供应了很年夜便当。因为ASP中已含混了变量范例的观点,以是,在举行ASP与vbscript交互的过程当中,良多程序员也惯于不声明vbscript的变量,如许减轻了服务器的剖析包袱,进而影响服务器的呼应哀求速率。
鉴于此,我们能够象在VB中强迫用户举行变量声明一样在vbscript中强迫用户举行变量声明。完成办法是在ASP程序行首安排<%optionexplicit%>。
2、对URL地点举行编码
在我们利用asp静态天生一个带参数URL地点并举行跳转时,在IE中剖析很一般,但在NetScrape扫瞄时却有毛病以下:
  HTTPError400
  400BadRequest
  Duetomalformedsyntax,therequestcouldnotbeunderstoodbytheserver.
  Theclientshouldnotrepeattherequestwithoutmodifications.
办理办法是对天生的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.redirectURL&"?"&var1&var2&var3
%>
3、清空工具
当利用完工具后,起首利用Close办法来开释工具所占用的体系资本;然后设置工具值为“nothing”开释工具占用内存。昔时,我就是在一张页面上创立了百余个没有清空工具的纪录集而溃散了我的IIS。上面的代码利用数据库内容创建一个下拉列表。代码示比方下:
<%myDSN="DSN=xur;uid=xur;pwd=xur"
mySQL="select*fromauthorswhereAU_ID<100"
setconntemp=server.createobject("adodb.connection")
conntemp.openmyDSN
setrstemp=conntemp.execute(mySQL)
ifrstemp.eofthen
response.write"数据库为空"
response.writemySQL
conntemp.close
setconntemp=nothing
response.end
 endif%>
<%dountilrstemp.eof%>
<%
rstemp.movenext
loop
rstemp.close
setrstemp=nothing
conntemp.close
setconntemp=nothing
%>
4、利用字符串创建SQL查询
利用字符串来创建查询其实不能加速服务器的剖析速率,相反,它还会增添服务器的剖析工夫。但在这里仍旧保举利用字符串取代复杂的查询语句来举行查询。如许做的优点是,能够敏捷发明程序成绩地点,从而便当高效地天生程序。示比方下:
<%mySQL=""select*"
mySQL=mySQL&"frompublishers"
mySQL=mySQL&"wherestate=NY"
response.writemySQL
setrstemp=conntemp.execute(mySQL)
rstemp.close
setrstemp=nothing
%>
5、利用case举行前提选择
在举行前提选择的时分,只管利用case语句,制止利用if语句。利用case语句,可使程序流程化,实行起来也比if语句来的快。示比方下:
<%
  FORi=1TO1000
  n=i
  Response.WriteAddSuffix(n)&"<br>"
  NEXT
  %>
  <%
  FunctionAddSuffix(num)
numpart=RIGHT(num,1)
SelectCASEnumpart
CASE"1"
IFInStr(num,"11")THEN
num=num&"th"
ELSE
num=num&"st"
ENDIF
CASE"2"
IFInStr(num,"12")THEN
num=num&"th"
ELSE
num=num&"nd"
ENDIF
CASE"3"
IFInStr(num,"13")THEN
num=num&"th"
ELSE
num=num&"rd"
ENDIF
CASE"4"
num=num&"th"
CASEELSE
num=num&"th"
ENDSelect
AddSuffix=num
  ENDFUNCTION
%>
6、利用adovbs.inc文件中界说的常量翻开纪录集
翻开纪录集时,能够界说纪录集翻开的游标范例和锁定范例。
在adovbs.inc文件中界说了一些常量来界说这些范例。adovbs.inc文件保留在inetpubiissamplesIISamples目次上面。上面枚举几个经常使用的游标范例和锁定范例。
游标范例:
adOpenFowardOnly游标只能向前;adOpenKeyset游标可向前大概向后,如一用户增加纪录,新纪录不会呈现在纪录会合;adOpenDynamic游标静态随便;adOpenStatic纪录集不合错误其他用户酿成的纪录修正有所反应。
锁定范例:
adLockReadOney不克不及修正纪录会合的纪录;adLockPessimistic在编纂一笔记录时锁定它;adLockOptimstic挪用纪录集Update办法时才锁定纪录;adLockBatchOpeimstic纪录只能成批更新。
<!--#INCLUDEVIRTUAL="/ADOVBS.INC"-->
<%
connectme="DSN=xur;uid=xur;pwd=xur"
sqltemp="select*frompublisherswherename=xur"
setrstemp=Server.CreateObject("adodb.Recordset")
rstemp.opensqltemp,connectme,adOpenStatic,adLockOptimstic
response.writerstemp.recordcount&"recordsin<br>"&sqltemp
rstemp.close
setrstemp=nothing
%>
7、制止在利用global.asa文件中举行工具界说
因为global.asa文件中的内容能够为站点内一切文件援用,无疑,在global.asa文件中举行工具界说能够省往良多反复事情。
好比在global.asa中的application_onstart函数中举行以下界说:
<%SUBapplication_onstart
setapplication("theCONN")=server.createobject("adodb.connection")
ENDSUB%>;
如许就能够在站点任何代码中做相似援用:
<%
mySQL="select*frompublisherswherestate=xur
setrstemp=application("theconn").execute(mySQL)
%>
一样地,能够在session_onstart函数中创立纪录集工具
<%SUBsession_onstart
setsession("rstemp")=server.createobject("adodb.recordset")
ENDSUB%>
然后在站点也面中举行以下援用:
<%
mySQL="select*frompublisherswherestate=xur
setsession("rstemp")=conntemp.execute(mySQL)
%>
但如许做的同时也有很年夜的负面影响,因为Application和session变量都只要在封闭网站的时分才开释占用的资本,以是session参数会华侈大批不用要内存,并且此时application变量成为服务器功能的瓶颈。
办理办法:
创建界说工具asp页面,在必要举行挪用这些工具的页面上,引进这张asp页面。假定界说工具的asp页面称号为define.asp,则只需在对应asp页面中到场以下语句就可以引进该页面。
<!--#INCLUDEVIRTUAL="/define.asp"-->
在举行页面引进时,最幸亏待引进的asp文件中不要包括<%@LANGUAGE="VBSCRIPT"%>语句。由于在asp文件中,只能有一句由@来界说的剧本剖析言语。
8、平安防护
asp供应了很好的代码回护机制,一切的asp代码都在服务器端实行而只前往给客户端代码实行了局。即使如许,在老版本的IIS中还能够在文件名前面家::$DATA来检察asp的源代码,这已属于WebServer平安范围不在本文会商局限内。上面提出两点复杂的平安注重事项。
固然在asp中倡议引进文件以inc作为扩大名,在这里仍倡议以asp作为引文件的扩大名。当这些代码在平安机制欠好的WebServer上运转时,只需在地点栏上输出引进文件的地点(inc为扩大名),就能够扫瞄该引进文件的内容,这是因为在WebServer上,假如没有界说好剖析某范例(好比inc)的静态毗连库时,该文件以源码体例显现。
不要把数据库文件放在网站布局外部,如许,当歹意人士猎取数据库路径后,就能够容易猎取该数据库,进而肆意变动数据库内容。对照好的做法是,为数据库创建DSN(DateSourceName),而在举行数据库会见时间接会见该DSN。

帮助用户快速实现各种应用服务,ASP商有整合各方面资源的能力,可在短期内为用户提供所需的解决方案。例如,典型的ERP安装,如果要在客户端安装的话需要半年到二年的时间,但是美国的一些ASP商如USI和CORIO能在90—120天内提供ERP应用方案。
作者: 透明    时间: 2015-1-18 20:59
最近在学asp,不要问我为什么不直接学.net,因为公司网站是asp做的所以有这个需要,卖了本书asp入门到精通,对里面的六大内置对象老是记不住,还有很多属性和方法看的头晕。
作者: 再见西城    时间: 2015-1-26 14:54
那么,ASP.Net有哪些改进呢?
作者: 海妖    时间: 2015-2-4 19:40
我认为比较好的方法是找一些比较经典的例子,每个例子比较集中一种编程思想而设计的。
作者: 飘灵儿    时间: 2015-2-10 06:16
先学习用frontpage熟悉html编辑然后学习asp和vbscript建议买书进行系统学习
作者: 乐观    时间: 2015-2-28 23:16
ASP也是这几种脚本语言中最简单易学的开发语言。但ASP也是这几种语言中唯一的一个不能很好支持跨平台的语言。  因为ASP脚本语言非常简单,因此其代码也简单易懂,结合HTML代码,可快速地完成网站的应用程序。
作者: 仓酷云    时间: 2015-3-17 06:45
如何更好的使自己的东西看上去很不错等等。其实这些都不是问题的实质,我们可以在实践中不断提升自己,不断充实自己。
作者: 柔情似水    时间: 2015-3-24 00:51
Session:这个存储跟客户端会话过程的数据,默认20分钟失效




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2