ASP 3.0高級編程(四十三)_ASP教程
教程Tag:暫無Tag,歡迎添加,賺取U幣!
推薦:用好ASP.NET 2.0的URL映射簡介: URL映射是ASP.NET 2.0中提供的新特性。URL映射技術(shù)幫助我們將一個(gè)特定URL映射為另一個(gè)URL。為了幫助理解,我們假設(shè)你在站點(diǎn)有一個(gè)叫Homepage.aspx的頁面來訪問主頁,所有的用戶也都用
9.3.5 數(shù)據(jù)高速緩存首先需要注意的是,數(shù)據(jù)高速緩存與記錄集高速緩存雖然都用于改善性能,但兩者是無關(guān)的。數(shù)據(jù)高速緩存是臨時(shí)的數(shù)據(jù)存儲區(qū),允許使用高速緩存中的數(shù)據(jù),而不是重新生成新的數(shù)據(jù)。這只適用于那些不經(jīng)常改動但多次被訪問的數(shù)據(jù)。
在ASP中一個(gè)最簡單的緩存數(shù)據(jù)的方法是使用Application和Session范圍的變量。例如,假設(shè)有一些需要選擇書類型的網(wǎng)頁。正常情況下,可能會創(chuàng)建一個(gè)含有以下函數(shù)的包含文件。
<%
Function BookTypes()
Dim rsBookTypes
Dim strQuote
strQuote = Chr(34)
Set rsBookTypes = Server.CreateObject ("ADODB.Recordset")
' Get the book types
rsBookTypes.Open "usp_BookTypes", strConn
Response.Write "<SELECT NAME=" & strQuote & lstBookType & strQuote & ">"
While Not rsBookTypes.EOF
Response.Write & "<OPTION>" & rsBookTypes("Type") & "</OPTION>"
rsBookTypes.MoveNext
Wend
Response.Write & "</SELECT>"
rsBookTypes.Close
Set rsBookTypes = Nothing
End Function
%>
這僅僅是調(diào)用一個(gè)存儲過程,從而得到書的類型,同時(shí)創(chuàng)建一個(gè)SELECT列表。上述代碼的缺點(diǎn)在于每次調(diào)用該函數(shù)都必須訪問數(shù)據(jù)庫。因此,重新修改這個(gè)函數(shù)。
<%
Function BookTypes()
Dim rsBookTypes
Dim strQuote
Dim strList
' See if the list is in the cache
strList = Application("BookTypes")
If strList = "" Then
' Not cached, so build up list and cache it
strQuote = Chr(34)
Set rsBookTypes = Server.CreateObject ("ADODB.Recordset")
' Get the book types
rsBookTypes.Open "usp_BookTypes", strConn
strList = "<SELECT NAME=" & strQuote & lstBookType & strQuote & ">"
While Not rsBookTypes.EOF
strList = strList & "<OPTION>" & rsBookTypes("type") & "</OPTION>"
rsBookTypes.MoveNext
Wend
strList = strList & "</SELECT>"
rsBookTypes.Close
Set rsBookTypes = Nothing
' Check the list
Application("BookTypes") = strList
End If
BookTypes = strList
End Function
%>
這段代碼不只是打開記錄集,它檢查Application變量BookType的值是否為空。如果不為空,則使用該變量的內(nèi)容。如果為空,則像以前一樣打開記錄集。顯然,一旦第一個(gè)人運(yùn)行了這一例程,便緩存了數(shù)據(jù),因此這只對那些不常變化的數(shù)據(jù)是有用的。
如果想在用戶基礎(chǔ)上緩存數(shù)據(jù),可以使用Session范圍的變量,但這里必須注意Session存在有效期。過期后會話層變量將和會話一起取消,代碼便有可能終止運(yùn)行。
利用Web Application Stress(WAS)工具,得到了表9-4的分析結(jié)果:
表9-4 利用WAS工具得到的分析結(jié)果
方 法
頁面點(diǎn)擊次數(shù)
沒有高速緩存
190
有高速緩存
11000
很明顯性能有所改善。但不要采用上述方法緩存一切內(nèi)容。畢竟,這種方法只適用于那些已經(jīng)格式化后用于顯示的數(shù)據(jù)。除此之外,還要考慮到如果Web服務(wù)器只為特定的一個(gè)人服務(wù),那幾乎不是一個(gè)典型的Web服務(wù)器的用法。使用WAS可以在一個(gè)服務(wù)器上模擬多個(gè)用戶,這樣可以更實(shí)際地測試應(yīng)用程序。
通過模擬一定數(shù)量的用戶,Web Application Stress工具可以對Web頁面進(jìn)行承受力測試。該工具有一個(gè)簡單的圖形界面,使用起來非常容易�?梢詮膆ttp://homer.rte.microsoft.com/獲得更多的信息,也可以下載該工具。
高速緩存對象
若要緩存未格式化過的數(shù)據(jù)該怎么辦?可以在不同地方以不同的方式使用嗎?當(dāng)然,也可以用Application或Session變量這樣做�?紤]一下書標(biāo)題的情況。你或許希望在多個(gè)頁面中使用這個(gè)標(biāo)題,也許在一個(gè)表格中顯示所有的標(biāo)題,或在一個(gè)列表框中顯示供用戶選擇等等。你可能會想到可以緩存記錄集本身而無需緩存含有標(biāo)簽的HTML文本。
可以在Application或Session變量中緩存對象,但有兩個(gè)主要的問題需要注意:
· 存放在Application變量中的對象必須支持自由線程,因此必須是自由線程對象或雙線程對象。這意味著無法在Application變量中緩存由VB創(chuàng)建的組件。
· 在Session狀態(tài)中存放單元線程對象意味著創(chuàng)建該對象的線程是唯一允許訪問它的線程。因此IIS無法較好地完成線程管理,因?yàn)槿魏卧噲D訪問這個(gè)對象的頁面都必須等待原有線程服務(wù)于該頁面。這將扼殺擴(kuò)展應(yīng)用程序的任何機(jī)會。
對于線程問題的討論參見第15章。
默認(rèn)情況下,ADO作為單元線程對象裝載,這主要是因?yàn)椴糠諳LE DB提供者并非是線程安全的。在ADO安裝目錄中有一個(gè)注冊表文件,可將ADO轉(zhuǎn)換成雙線程模型,由此使ADO對象可以安全地存放在Application和Session對象中。
你也許會認(rèn)為所有的問題都解決了,可以通過使用各種類型的對象獲得顯著的速度提升,但這并不一定。許多人已經(jīng)認(rèn)識到既然連接到數(shù)據(jù)庫是一個(gè)相對昂貴的操作,那么緩存Connection對象可在再次連接時(shí)節(jié)省大量的時(shí)間。的確如此,但緩存Connection對象意味著該連接永遠(yuǎn)不會關(guān)閉,因此連接緩存池的工作效率比較低。連接緩存池隱含的一個(gè)思想實(shí)際上是減少服務(wù)器上使用的資源,而緩存ASP狀態(tài)中的對象顯然不能減少資源的使用。事實(shí)上還增加了對它們的占用,因?yàn)槊烤彺嬉粋(gè)對象便要占用服務(wù)器的資源,對于一個(gè)繁忙的站點(diǎn)而言,這將極大地降低Web服務(wù)器的效率。
所以不應(yīng)存儲Connection對象,但對于Recordset對象,特別是斷開連接的記錄集呢?假定ADO已從單元線程變成了雙線程,就沒有什么理由不這么做了,只要確切知道自己在做什么。不要認(rèn)為這會自動地改善ASP頁的性能。每一個(gè)緩存的記錄集都在內(nèi)存和ASP管理方面占用服務(wù)器的資源,因此不要緩存大的記錄集。
分享:ASP讀寫注冊表一個(gè)例子: 以下為引用的內(nèi)容: <%Dim ReadComputerName Set ReadComputerName=CreateObject("WScript.Shell") Dim ComputerName,Reg
相關(guān)ASP教程:
- asp FSO 讀寫文件本文件實(shí)現(xiàn)代碼
- asp中isNull、isEmpty和空字符串的區(qū)別
- asp獲取用戶真實(shí)IP地址的方法
- asp連接sqlserver數(shù)據(jù)庫實(shí)現(xiàn)代碼
- asp中正則表達(dá)式過濾html代碼函數(shù)
- asp中g(shù)et post提交表單區(qū)別
- 網(wǎng)頁模板:ASP內(nèi)建對象Request
- xmlhttp的open方法使用詳解
- ASP的常用的自定義函數(shù)大全
- asp中用for循環(huán)的一個(gè)小技巧
- eWebEditor v3.8 列目錄
- ASP無組件分頁實(shí)現(xiàn)思路及代碼
- 相關(guān)鏈接:
- 教程說明:
ASP教程-ASP 3.0高級編程(四十三)
。