|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
缺乏可以共同遵循的行业标准,ASP还处在发展初期,大家对它的理解不同,如产品和服务标准,收费标准等,不利于行业的健康发展。编程|初级9.3.5数据高速缓存
起首必要注重的是,数据高速缓存与纪录集高速缓存固然都用于改良功能,但二者是有关的。数据高速缓存是一时的数据存储区,同意利用高速缓存中的数据,而不是从头天生新的数据。这只合用于那些不常常修改但屡次被会见的数据。
在ASP中一个最复杂的缓存数据的办法是利用Application和Session局限的变量。比方,假定有一些必要选择书范例的网页。一般情形下,大概会创立一个含有以下函数的包括文件。
<%
FunctionBookTypes()
DimrsBookTypes
DimstrQuote
strQuote=Chr(34)
SetrsBookTypes=Server.CreateObject("ADODB.Recordset")
Getthebooktypes
rsBookTypes.Open"usp_BookTypes",strConn
Response.Write"<SELECTNAME="&strQuote&lstBookType&strQuote&">"
WhileNotrsBookTypes.EOF
Response.Write&"<OPTION>"&rsBookTypes("Type")&"</OPTION>"
rsBookTypes.MoveNext
Wend
Response.Write&"</SELECT>"
rsBookTypes.Close
SetrsBookTypes=Nothing
EndFunction
%>
这仅仅是挪用一个存储历程,从而失掉书的范例,同时创立一个SELECT列表。上述代码的弱点在于每次挪用该函数都必需会见数据库。因而,从头修正这个函数。
<%
FunctionBookTypes()
DimrsBookTypes
DimstrQuote
DimstrList
Seeifthelistisinthecache
strList=Application("BookTypes")
IfstrList=""Then
Notcached,sobuilduplistandcacheit
strQuote=Chr(34)
SetrsBookTypes=Server.CreateObject("ADODB.Recordset")
Getthebooktypes
rsBookTypes.Open"usp_BookTypes",strConn
strList="<SELECTNAME="&strQuote&lstBookType&strQuote&">"
WhileNotrsBookTypes.EOF
strList=strList&"<OPTION>"&rsBookTypes("type")&"</OPTION>"
rsBookTypes.MoveNext
Wend
strList=strList&"</SELECT>"
rsBookTypes.Close
SetrsBookTypes=Nothing
Checkthelist
Application("BookTypes")=strList
EndIf
BookTypes=strList
EndFunction
%>
这段代码不但是翻开纪录集,它反省Application变量BookType的值是不是为空。假如不为空,则利用该变量的内容。假如为空,则像之前一样翻开纪录集。明显,一旦第一团体运转了这一例程,便缓存了数据,因而这只对那些不常变更的数据是有效的。
假如想在用户基本上缓存数据,可使用Session局限的变量,但这里必需注重Session存在无效期。过时后会话层变量将和会话一同作废,代码便有大概停止运转。
使用WebApplicationStress(WAS)工具,失掉了表9-4的剖析了局:
表9-4使用WAS工具失掉的剖析了局
方法
页面点击次数
没有高速缓存
190
有高速缓存
11000
很分明功能有所改良。但不要接纳上述办法缓存统统内容。究竟,这类办法只合用于那些已格局化后用于显现的数据。除此以外,还要思索到假如Web服务器只为特定的一团体服务,那几近不是一个典范的Web服务器的用法。利用WAS能够在一个服务器上摹拟多个用户,如许能够更实践地测试使用程序。
经由过程摹拟必定数目的用户,WebApplicationStress工具能够对Web页面举行接受力测试。该工具有一个复杂的图形界面,利用起来十分简单。能够从http://homer.rte.microsoft.com/取得更多的信息,也能够下载该工具。
高速缓存工具
若要缓存未格局化过的数据该怎样办?能够在分歧中央以分歧的体例利用吗?固然,也能够用Application或Session变量如许做。思索一下书题目的情形。你也许但愿在多个页面中利用这个题目,大概在一个表格中显现一切的题目,或在一个列表框中显现供用户选择等等。你大概会想到能够缓存纪录集自己而无需缓存含有标签的HTML文本。
能够在Application或Session变量中缓存工具,但有两个次要的成绩必要注重:
・寄存在Application变量中的工具必需撑持自在线程,因而必需是自在线程工具或双线程工具。这意味着没法在Application变量中缓存由VB创立的组件。
・在Session形态中寄存单位线程工具意味着创立该工具的线程是独一同意会见它的线程。因而IIS没法较好地完成线程办理,由于任何试图会见这个工具的页面都必需守候原有线程服务于该页面。这将抹杀扩大使用程序的任何时机。
关于线程成绩的会商拜见第15章。
默许情形下,ADO作为单位线程工具装载,这次要是由于部分OLEDB供应者并不是是线程平安的。在ADO安装目次中有一个注册表文件,可将ADO转换成双线程模子,由此使ADO工具能够平安地寄存在Application和Session工具中。
你大概会以为一切的成绩都办理了,能够经由过程利用各类范例的工具取得明显的速率提拔,但这其实不必定。很多人已熟悉到既然毗连到数据库是一个绝对高贵的操纵,那末缓存Connection工具可在再次毗连时节俭大批的工夫。切实其实云云,但缓存Connection工具意味着该毗连永久不会封闭,因而毗连缓存池的事情效力对照低。毗连缓存池隐含的一个头脑实践上是削减服务器上利用的资本,而缓存ASP形态中的工具明显不克不及削减资本的利用。现实上还增添了对它们的占用,由于每缓存一个工具便要占用服务器的资本,关于一个忙碌的站点而言,这将极年夜地下降Web服务器的效力。
以是不该存储Connection工具,但关于Recordset工具,出格是断开毗连的纪录集呢?假定ADO已从单位线程酿成了双线程,就没有甚么来由不这么做了,只需切实晓得本人在做甚么。不要以为这会主动地改良ASP页的功能。每个缓存的纪录集都在内存和ASP办理方面占用服务器的资本,因而不要缓存年夜的纪录集。
另外一个技能是利用纪录集的GetRows办法,将纪录集转换成一个数组。由于</p>[1][2][3]下一页
因为ASP脚本语言非常简单,因此其代码也简单易懂,结合HTML代码,可快速地完成网站的应用程序。还无法完全实现一些企业级的功能:完全的集群、负载均横。 |
|