仓酷云

标题: ASP教程之二十八条改良 ASP 功能和表面的技能(1-... [打印本页]

作者: 金色的骷髅    时间: 2015-1-16 22:54
标题: ASP教程之二十八条改良 ASP 功能和表面的技能(1-...
由于ASP提供的是一对多的服务,所以用户的一些特殊需求很难得到满足。技能|功能二十八条改良ASP功能和表面的技能
LenCardinal,初级参谋,MicrosoftConsultingServicesGeorgeV.Reilly
MicrosoftIISPerformanceLead

改编自NancyCluts的文章开辟职员手艺工程师
MicrosoftCorporation
2000年4月

择要:本文先容优化ASP使用程序和VBScript的技能。

目次
技能1:将常常利用的数据缓存在Web服务器上
技能2:将常常利用的数据缓存在Application或Session工具中
技能3:将数据和HTML缓存在Web服务器的磁盘上
技能4:制止将非急迅的组件缓存在Application或Session工具中
技能5:不要将数据库毗连缓存在Application或Session工具中
技能6:公道地利用Session工具
技能7:将代码封装在COM工具中
弁言
功能是一个特性。您必需事后计划功能,不然您今后就得重写使用程序。就是说,有哪些好的战略可以使ActiveServerPages(ASP)使用程序功能到达最好?

本文先容了优化ASP使用程序和VisualBasic?ScriptingEdition(VBScript)的技能。本文会商了很多圈套。本文列出的倡议已在http://www.microsoft.com和别的站点中举行了测试,效果非常明显。本文假定您已对ASP开辟,包含VBScript和/或JScript、ASPApplication、ASPSession和别的ASP固有工具(Request、Response和Server)有了基础懂得。

一般,ASP功能次要取决于ASP代码自己之外的良多要素。我们不在一篇文章中排列出一切的信息,在本文开头处我们列出了与功能有关的资本。这些链接涵盖了ASP和非ASP主题,包含ActiveX?数据工具(ADO)、组件工具模子(COM)、数据库和InternetInformationServer(IIS)设置。这些都是我们喜好的一些链接-必定要往看看。

技能1:将常常利用的数据缓存在Web服务器上
典范的ASP页从后端数据存储中检索数据,然后将了局转换成超文本标志言语(HTML)。不管数据库的速率怎样,从内存中检索数据总要比从后端数据存储中检索数据快很多。从当地硬盘读取数据一般也比从数据库中检索数据更快。因而,一般能够将数据缓存在Web服务器上(存储在内存或磁盘中),来进步功能。

缓存是传统的以空间调换工夫的做法。假如您缓存的内容准确,那末您能够看到功能会有明显的进步。为使缓存无效,必需保留那些常常反复利用的数据,且要从头盘算这些数据必要(过度)年夜的开支。假如缓存的都是些陈腐的数据,就会形成内存华侈。

不常常产生改动的数据是很好的缓存候选数据,由于您不用忧虑跟着工夫的迁徙该数据与数据库同步的成绩。组合框列表、援用表、DHTML碎片、扩大标志言语(XML)字符串、菜单项和站点设置变量(包含数据源称号(DSN)、Internet协定(IP)地点和Web路径)都是很好的缓存候选内容。注重您能够缓存数据的“暗示”,而不缓存数据自己。假如ASP页很少变动,且缓存的开支也很年夜(比方,全部产物目次),则招考虑事前发生HTML,而不是在呼应每一个哀求时从头显现。

应将数据缓存在那里,有哪些缓存战略?一般,数据缓存在Web服务器的内存或磁盘中。下两个技能报告了这两个办法。

技能2:将常常利用的数据缓存在Application或Session工具中
ASPApplication和Session工具为将数据缓存在内存中供应了便利的容器。您能够将数据指派到Application和Session工具中,这些数据在HTTP挪用之间保存在内存中。Session数据是按每一个用户分离存储的,而Application数据则在一切用户之间共享。

甚么时分将数据装载到Application或Session中呢?一般,数据是在启动Application或Session古装载。要在Application或Session启动过程当中装载数据,应将得当的代码分离增加到Application_OnStart()或Session_OnStart()中。这些函数应在Global.asa中,假如没有,则能够增加这些函数。还能够在第一次必要古装载该数据。为此,在ASP页中增加一些代码(或编写一个可反复利用的剧本函数),以反省数据是不是存在,假如不存在,就装载数据。这是一个传统的功能手艺,称为“惰性盘算”-在您晓得必要某一个值之前不盘算该值。比方:

<%
FunctionGetEmploymentStatusList
Dimd
d=Application(?EmploymentStatusList?)
Ifd=??Then
FetchEmploymentStatusListfunction(notshown)
fetchesdatafromDB,returnsanArray
d=FetchEmploymentStatusList()
Application(?EmploymentStatusList?)=d
EndIf
GetEmploymentStatusList=d
EndFunction
%>


能够为所必要的每一个数据块编写相似的函数。

应以甚么格局存储数据?能够存储任何变体范例,由于一切剧本变量都是变体型。比方,您能够存储字符串、整数或数组。一般,您将以这些变量范例之一存储ADO纪录集的内容。要从ADO纪录集猎取数据,您能够手工将数据复制到VBScript变量,一次一个字段。利用一个ADO纪录集耐久函数GetRows()、GetString()或Save()(ADO2.5),可加速速率且更简单一些。其具体情形已超越本文所会商的局限,但上面给出了一个函数举例,申明利用GetRows()前往纪录集数据的一个数组:

GetRecordset,returnasanArray
FunctionFetchEmploymentStatusList
Dimrs
Setrs=CreateObject(?ADODB.Recordset?)
rs.Open?selectStatusName,StatusIDfromEmployeeStatus?,_
?dsn=employees;uid=sa;pwd=;?
FetchEmploymentStatusList=rs.GetRows()?ReturndataasanArray
rs.Close
Setrs=Nothing
EndFunction


对下面举例做更进一步改善,能够将HTML缓存为列表,而不是数组。上面是复杂的示例:

GetRecordset,returnasHTMLOptionlist
FunctionFetchEmploymentStatusList
Dimrs,fldName,s
Setrs=CreateObject(?ADODB.Recordset?)
rs.Open?selectStatusName,StatusIDfromEmployeeStatus?,_
?dsn=employees;uid=sa;pwd=;?
s=?<selectname=??EmploymentStatus??>?&vbCrLf
SetfldName=rs.Fields(?StatusName?)ADOFieldBinding
DoUntilrs.EOF
NextlineviolatesDontDoStringConcats,
butitsOKbecausewearebuildingacache
s=s&?<option>?&fldName&?</option>?&vbCrLf
rs.MoveNext
Loop
s=s&?</select>?&vbCrLf
rs.Close
Setrs=NothingSeeReleaseEarly
FetchEmploymentStatusList=sReturndataasaString
EndFunction


在得当的前提下,能够将ADO纪录集自己缓存在Application或Session感化域中。有两个告诫:

必需将ADO标志为自在线程
必需利用断开毗连的纪录集。
假如不克不及包管满意这两个请求,则不要缓存ADO纪录集。鄙人面的“非急迅组件”和“不要缓存毗连”技能中,我们将会商将COM工具存储在Application或Session感化域中的伤害性。

当您将数据存储在Application或Session感化域时,数据将保存在那边,直到您以编程体例改动它、Session过时或Web使用程序从头启动为止。假如数据必要更新怎样办?要手工强迫对Application数据举行更新,您能够会见只要办理员才可会见的ASP页来更新数据。大概,您能够经由过程函数按期主动革新数据。上面例子存储带有缓存数据的工夫戳,并隔一段工夫后革新数据。

<%
errorhandingnotshown...
ConstUPDATE_INTERVAL=300Refreshinter</p>源代码保护方面其实现在考虑得没那么多了..NET也可以反编译.ASP写得复杂的话别人能看得懂的话.他也有能力自己写了.这方面担心的倒不太多.纵观现在网上可以下载的那些所谓BBS还有什么网站等等的源代码
作者: 爱飞    时间: 2015-1-19 15:33
以HTML语言整合(HTML负责界面上,ASP则负责功能上)形成一个B/S(浏览器/服务器)模式的网页程序。
作者: 金色的骷髅    时间: 2015-1-24 12:53
学习是为了用的,是为了让你的程序产生价值,把握住这个原则会比较轻松点。除此之外,课外时间一定要多参加一些社会实践活动,来锻炼自己的能力。
作者: 小魔女    时间: 2015-2-1 13:29
另外因为asp需要使用组件,所以了解一点组件的知识(ADODB也是组件)
作者: 精灵巫婆    时间: 2015-2-7 06:19
另外因为asp需要使用组件,所以了解一点组件的知识(ADODB也是组件)
作者: 莫相离    时间: 2015-2-20 18:41
封装性使得代码逻辑清晰,易于管理,并且应用到ASP.Net上就可以使业务逻辑和Html页面分离,这样无论页面原型如何改变,业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高。
作者: 再现理想    时间: 2015-3-6 18:43
代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。
作者: 冷月葬花魂    时间: 2015-3-13 05:59
另外因为asp需要使用组件,所以了解一点组件的知识(ADODB也是组件)
作者: 第二个灵魂    时间: 2015-3-20 13:53
Request:从字面上讲就是“请求”,因此这个是处理客户端提交的东东的,例如Resuest.Form,Request.QueryString,或者干脆Request("变量名")




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