仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 419|回复: 7
打印 上一主题 下一主题

[学习教程] ASP网页设计Asp编码优化技能8则

[复制链接]
因胸联盟 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:54:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
想法是和程序员的想法不一样的.至于为什么.大家去想一想.跟心理学有关的编码|技能|优化
  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。


在实现ERP等高端的ASP应用时,用户需要提供核心的经营资料,需要ASP商有很高的信用度。楼上说交互性不好,太牵强了吧。在微软提供的一套框架中,利用asp做网站,开发效率高,使用人数少,减少不必要的开销。交互性是互动方式,是有开发人员决定的。
透明 该用户已被删除
沙发
发表于 2015-1-20 06:04:57 | 只看该作者
接下来就不能纸上谈兵了,最好的方法其实是实践。实践,只能算是让你掌握语言特性用的。而提倡做实际的Project也不是太好,因为你还没有熟练的能力去综合各种技术,这样只能使你自己越来越迷糊。
若天明 该用户已被删除
板凳
发表于 2015-1-26 16:49:44 | 只看该作者
ASP的语言不仅仅只是命令格式差不多,而是包含在<%%>之内的命令完全就是VB语法。虽然ASP也是做为单独的一个技术来提出的,但他就是完全继承了VB所有的功能。
老尸 该用户已被删除
地板
发表于 2015-2-4 16:47:44 | 只看该作者
Session:这个存储跟客户端会话过程的数据,默认20分钟失效
飘灵儿 该用户已被删除
5#
发表于 2015-2-28 19:20:42 | 只看该作者
Session:这个存储跟客户端会话过程的数据,默认20分钟失效
只想知道 该用户已被删除
6#
发表于 2015-3-10 06:17:46 | 只看该作者
哪些内置对象是可以跳过的,或者哪些属性和方法是用不到的?
飘飘悠悠 该用户已被删除
7#
发表于 2015-3-17 05:07:32 | 只看该作者
运用经典的例子。并且自己可以用他来实现一些简单的系统。如果可以对他进行进一步的修改,找出你觉得可以提高性能的地方,加上自己的设计,那就更上一个层次了,也就会真正地感到有所收获。
柔情似水 该用户已被删除
8#
发表于 2015-3-23 20:12:48 | 只看该作者
他的语法和设计思路和VB完全相同,导致很多ASP的书都留一句“相关内容请参考VB的相关教材....”更糟糕的是,相当多的ASP教程混合了Javascript,VBscript等等脚本语言,搞的初学者。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-24 02:50

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表