|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
结论:和PHP一样,ASP简单而易于维护,很适合小型网站应用,通过DCOM和MTS技术,ASP甚至还可以完成小规模的企业应用,但ASP的致命缺点就是不支持跨平台的系统,在大型项目开发和维护上非常困难。编码|优化
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的收费是根据软件的类型、客制化程度、用户数量、服务期限来定的,对客户来说这笔费用是可以预见的。方便于客户应用软件的升级。 |
|