国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術(shù)及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - ASP教程 - ASP緩存技術(shù)詳解

ASP緩存技術(shù)詳解

2019-07-02 13:45服務器之家 ASP教程

這篇文章主要介紹了ASP緩存技術(shù)詳解,本文詳細介紹了ASP緩存技術(shù)、ASP緩存的分類、ASP緩存的實現(xiàn)方法和使用方法等,需要的朋友可以參考下

一、何謂ASP緩存/為什么要緩存 
  當你的web站點采用asp技術(shù)建立的初期,可能感覺到的是 asp動態(tài)網(wǎng)頁技術(shù)帶來的便利性,以及隨意修改性、自如的http控制。但是,隨著訪問量的增加,你一定會發(fā)現(xiàn)自己的站點訪問速度越來越慢,IIS重新啟動得越來越頻繁。接下來,你一定想優(yōu)化asp,諸如更換性能更優(yōu)異的數(shù)據(jù)庫、建立索引、編寫存儲過程等等。這些措施有些不需要增加成本壓力,有些則成本壓力很大(譬如叢access到SQL),而且效果還不一定。

  面對web訪問壓力,我認為最經(jīng)濟的辦法是利用緩存優(yōu)化技術(shù)來實現(xiàn)緩解 web的服務壓力。
Web訪問量增加通常意味著以下資源需求的快速增長:

1、 網(wǎng)卡流量增加,需要消耗更多的CPU處理網(wǎng)絡流量和網(wǎng)絡I/O線程。
2、 需要更頻繁的打開/關(guān)閉數(shù)據(jù)庫連結(jié)(如果使用數(shù)據(jù)庫技術(shù)—通常asp都會采用數(shù)據(jù)庫作為數(shù)據(jù)存儲),嚴重消耗資源的事物數(shù)量、以及事務相互競爭資源引起的死鎖、會增加網(wǎng)絡I/O或者CPU消耗。
3、 如果采用session的話,IIS為了維持狀態(tài),會消耗更多內(nèi)存,而內(nèi)存消耗可能會引發(fā)物理內(nèi)存不夠,引起物理內(nèi)存同輔存間的頻繁交換,從而引起代碼執(zhí)行的停頓,web響應阻滯。
4、 由于訪問的不到及時響應,會引起網(wǎng)頁訪問故障,導致用戶刷新,從而加劇CPU、內(nèi)存等資源需求。

  實際上,考慮通常的web應用程序,很多時候的動態(tài)代碼執(zhí)行是不必要的。

二、asp緩存的分類

  擅自總結(jié),asp的緩存可以分為兩類:

  1、 文件緩存
  所謂文件緩存,就是根據(jù)邏輯判斷,一段時間內(nèi)某個asp的特定執(zhí)行將不會有很大的變動,因而將內(nèi)容以靜態(tài)html的形式存放,然后以web的重定向技術(shù)讓客戶端訪問靜態(tài)文件,以達到減少CPU、數(shù)據(jù)庫資源等的需求。這樣的應用很多,譬如很多論壇就是在回復貼子的時候?qū)⒄麄€貼子重新生成一個靜態(tài)文件,然后進行重定向的,例如 donews.com的論壇。該成靜態(tài)還有一個副作用(好處)–可以很容易被google等搜索引擎收錄。一些所謂新聞發(fā)布系統(tǒng)的都采用了此技術(shù)。

  2、 文件片斷緩存

  所謂文件緩存,也是基于邏輯判斷,某部分數(shù)據(jù)(通常是需要消耗資源的大容量數(shù)據(jù)庫查詢?nèi)〉茫┰谝欢〞r間內(nèi)不會改變,所以我們可以將這些數(shù)據(jù)利用文件的形式進行存儲,當需要時候,可以通過讀取文件來獲取數(shù)據(jù),避免增加數(shù)據(jù)庫的負擔。例如,我們通常將一些數(shù)據(jù)以xml格式存儲,然后利用xslt技術(shù)實現(xiàn)顯示(xml處理通常需要大量CPU資源,所以通常是IE直接讀取xml到客戶端在客戶的CPU上進行處理)。CSDN的論壇就是這樣處理的。

  3、 主存緩存

  除此之外,還可以考慮在內(nèi)存中處理緩存,將需要及時響應的內(nèi)容存儲在內(nèi)存中,一旦訪問需求,立即從快速的貯存中輸送出去。如果極大量的訪問需求集中在幾個少量的頁面或者主存足夠多,我想采用主存緩存一定可以大幅度提高web訪問性能。

三、如何實現(xiàn)/使用緩存

  實現(xiàn)緩存需要考慮以下問題:

  1、 哪些頁面會在短時間內(nèi)不會改變?
  分析自己的站點,這樣的頁面很多。譬如一個站點通常都有新聞資訊類的欄目,這些欄目通常都是站點維護人員在一天的某個時間發(fā)布資料,之后很少改動頁面。那么這些頁面就適合于采用靜態(tài)文件緩存。實際上,所謂新聞發(fā)布系統(tǒng)就是這么做的,那么那也可以參考這些系統(tǒng)的思想改造自己的原有動態(tài)asp頁面。

  2、 那些頁面針對全部訪問者都采用同一個邏輯生成(也就是不區(qū)分訪問者)。
  除了新聞資訊之類的欄目所有訪問者都看一個界面外,論壇等消耗資源的應用一般也可以設計成統(tǒng)一邏輯生成(同一個貼子,張三李四看的都一樣),針對這類應用頁面我們也可以采用靜態(tài)緩存來實現(xiàn)。也可以考慮將數(shù)據(jù)片斷化,利用腳本技術(shù)在服務器處理能力之外也就是客戶端瀏覽器進行處理。

  3、 采用緩存的代價和收獲。
  主要就是“空間換(響應)時間”。利用緩存技術(shù)將之后頻繁需要的內(nèi)容進行預處理,使之提高web服務器響應能力,更重要贏得訪問者的歡心。
代價就是web空間需求增加,同時又可能影響到訪問效果。
但我認為適當?shù)木彺?,是利大于弊的?/p>

  4、 那些地方不適宜采用緩存
  動態(tài)查詢頁面,每個人的查詢內(nèi)容不一樣,所以顯示結(jié)果不大一樣,所以不大可能將查詢結(jié)果生成緩存,所以采用緩存較為復雜且緩存利用率底下,造成管理成本上什(假設你緩存了1000個查詢關(guān)鍵字,那么管理這些關(guān)鍵字同緩存的對應也是麻煩事)。

四、實例分析

  假設一個建議論壇的原有布局如下:

根目錄下:
default.asp 首頁,一般是精華、推薦之類
listBorad.asp 該文件列出全部分欄目的名稱和介紹,如果攜帶參數(shù)MainBID就表示要列出板塊下的欄目
listThread.asp 該文件如果不攜帶任何參數(shù)表示列出全部的貼子,攜帶MainBID表示列出某塊的全部貼子。如果攜帶subBID表示列出具體欄目的貼子。如果攜帶 page參數(shù)表示分頁列出主題。
ViewThread.asp 列出某個貼子內(nèi)容。我們假設貼子顯示為一個發(fā)言,任意跟貼全部列在后面。ID參數(shù)為要顯示的貼子。
Reply.asp 回應某個貼子,攜帶參數(shù)Id回應某個貼子

  其它的暫不討論。

  以上,我們可以看到,如果全部是采用原始的 ASP/PHP來做,那幾乎每一個asp文件的執(zhí)行都需要數(shù)據(jù)庫操作,頻繁的查詢,多表查詢。要知道查詢數(shù)據(jù)庫最終會帶來性能的下降,響應速度下降,帶給訪問者緩慢的瀏覽影響,不利于web的質(zhì)量。更重要的是對于甲乙兩個人來將,他們訪問ViewThread.asp之類的如果ID一致,那么很多時候他們會看到同樣的內(nèi)容(他們的瀏覽器收到的HTML代碼幾乎一樣),但是為了這“同樣的內(nèi)容”,服務器需要打開數(shù)據(jù)庫連結(jié)、查詢,讀取紀錄,顯示,關(guān)閉紀錄、數(shù)據(jù)庫連結(jié)。。。。以下列的消耗服務器資源的操作,如果是更多的人來訪問,最終的結(jié)果是這些人加劇消耗服務器資源。實際上,這些為了“同樣的內(nèi)容”所做的重復勞動是可以利用緩存技術(shù)進行優(yōu)化避免的。譬如:

  在reply.asp提交內(nèi)容后,我們立即調(diào)用生成靜態(tài)的功能,將整個貼子內(nèi)容存儲為viewThread_xxxx.htm之類的靜態(tài)html文件,再通常情況下訪問viewThread.asp?ID=xxxx的時候,系統(tǒng)自動 redirect到對應的靜態(tài)文件viewThreadxxxx.htm去。這樣,當一個貼子沒有最新發(fā)布時候,他始終是靜態(tài)內(nèi)容提供給瀏覽者;一旦有了新的提交,將會更新到靜態(tài)文件中去,這樣,將會節(jié)省很多次數(shù)據(jù)庫操作,大大提高響應速度。

  listBorad.asp也可以實施靜態(tài)化。我們可以分析其可能攜帶的參數(shù),將緩存文件名設定為listBoard_xx.htm,在增加新的欄目時候進行更新 listBoard_xxx.htm。listThread.asp也類似,只不過由于其參數(shù)更多,所以緩存文件也會很多。擊若要緩存 listThread.asp? subBID=xxx&page=2,那么對應的靜態(tài)文件是listThread_xxx_p2.htm。default.asp也一樣。

  那么如何判斷什么時候更新?在什么時機更新?
討論listThread.asp? subBID=xxx&page=2,我們在執(zhí)行l(wèi)istThread.asp俄時候提取subID和page,然后探測 listThread_xxx_p2.htm是否存在,如果不存在就調(diào)用靜態(tài)生成功能進行生成該文件,最終重定向到此靜態(tài)文件。注意,此處的不存在就意味著出現(xiàn)了新的內(nèi)容需要我們進行更新。

  那如何造成文件不存在呢?刪除。我們在發(fā)表一個新的貼子、刪除貼子、移動貼子的時候我們可以將類似listThread_xxx_p2.htm之類的靜態(tài)文件全部刪除。這樣就通知了何時要進行緩存。

  現(xiàn)在還剩下一個問題,如何生成靜態(tài)文件?

  我們注意到,之前我們提到的“同樣的內(nèi)容”。我們可以將改造前的default.asp、listThread.asp等拷貝一個副本,取名為default_d.asp、listThread_2.asp,且在同一個目錄中(理論上 listThtrad.asp?subID=123同LISTtHREAD_D.ASP?SUBID=123的訪問結(jié)果會是同樣的內(nèi)容),這樣我們在需要生成靜態(tài)文件的邏輯中,通過WEB訪問請求的方式調(diào)用改造前的副本,得到html代碼,并存儲為靜態(tài)文件。這個web請求實際上相當于在任何真實瀏覽者訪問靜態(tài)內(nèi)容之前,由服務器自身現(xiàn)察看將會輸出的html,然后返回這些代碼,利用文件操作功能存儲為靜態(tài)文件。這樣,緩存文件就在真正瀏覽者之前被創(chuàng)建。

  這樣的方案幾乎不觸動原來的布局,幾乎不會造成因為改造出現(xiàn)404之類的錯誤。其次,靜態(tài)文件也會幫助你的站點容易被被google之類的搜索引擎收錄。何樂而不為?

  最后,提醒,通過web訪問,asp編程環(huán)境下,很多人采用xmlHTTP組件訪問,這會造成很多問題。 xmlhttp自身會cache請求的資源,導致我們通過此組件請求得到的內(nèi)容不是最新的,造成邏輯上的混亂。所以,應當選擇xml Server http對象或者winhttp組件來實現(xiàn)web請求資源。
使用ASP中的緩存技術(shù)可以很大程度上提高你的網(wǎng)站性能,其實這些實現(xiàn)方法是非常的簡單,它將說明如何在服務器上的緩存是如何工作以及你如何使用一種被稱為斷開連接的ADO連接技術(shù)。

  在介紹這些技術(shù)之前先說明一下到底什么是ASP的緩存技術(shù)。

  所謂緩存其實就是在內(nèi)存中開辟一個用來保存數(shù)據(jù)的空間,使用緩存你就不用頻繁的訪問你保存在硬盤上的數(shù)據(jù)了,靈活的使用緩存你就免去了心疼的看著可憐的硬盤飽受讀數(shù)據(jù)時的折磨了。當你一旦執(zhí)行了一個查詢動作,并且將查詢結(jié)果放入緩存中后,你就可以很迅速的重復訪問這些數(shù)據(jù)了。而如果你不把數(shù)據(jù)放入緩存的話,當你再次執(zhí)行這個查詢時,服務器會將進程耗費在從數(shù)據(jù)庫中獲取并排序上了。

  當數(shù)據(jù)保存在緩存中時,再次查詢時耗費的時間主要是在顯示數(shù)據(jù)的時間上了。
也就是說,我們不應該把經(jīng)常需要改變的數(shù)據(jù)放到服務端的緩存中,我們應該把改變少,但是又需要經(jīng)常訪問的數(shù)據(jù)放到緩存中。

  現(xiàn)在我們先討論ASP在服務端使用緩存的技術(shù),過會再討論ASP如何在客戶端使用
緩存的技術(shù)。

  當你有大量的數(shù)據(jù)(靜態(tài)的,就是說變動比較少的)需要顯示給客戶端時,你就可以考慮使用服務端的緩存技術(shù)了。這種技術(shù)尤其適用于那些顯示風格一致性比較強的網(wǎng)站(呵呵,對于非主流的網(wǎng)站可不好用的說。)

  其實實現(xiàn)方法特別的簡單,大家只要看看下面這個簡單的例子就明白了。

  這是一個用來顯示書籍分類的例子程序

DisplayBooks.ASP文件:

復制代碼代碼如下:

< %@ LANGUAGE=JavaScript % >    
< html >    
< body >    
< form method=post >    
書籍分類; < %= getBooksListBox() % >    
< p>    
< input type=submit >    
 
< %    
function getBooksListBox()    
{    
BooksListBox = Application("BooksListBox")    
if (BooksListBox != null) return BooksListBox;    
crlf = String.fromCharCode(13, 10)    
BooksListBox = "< select name=Books>" + crlf;    
SQL = "Select * FROM Books orDER BY Name";    
cnnBooks = Server.CreateObject("ADODB.Connection");    
cnnBooks.Open("Books", "Admin","");    
rstBooks = cnnBooks.Execute(SQL);    
fldBookName = rstBooks("BookName");    
while (!rstBooks.EOF){    
BooksListBox = BooksListBox + " < option>" +    
fldBookName + "" + crlf;    
rstBooks.MoveNext();    
}    
BooksListBox = BooksListBox + ""    
Application("BooksListBox") = BooksListBox    
return BooksListBox;    
}    
% >

 

很簡單把,其實就是用了很簡單的Application技術(shù),而且就一句話的不同:

復制代碼代碼如下:

 Application("BooksListBox") = BooksListBox

 

你可以驗證一下你就會發(fā)現(xiàn)服務器上的請求數(shù)量會降低不少的。這種情況尤其適合與那些更新不是很頻繁的網(wǎng)站內(nèi)容,例如你一天(或則很長時間)只更新一次。

  下面再討論一種客戶端的緩存技術(shù)這種技術(shù)也叫斷開連接的ADO連接技術(shù)(翻譯水平太次,聽上去怎么這么別扭)。這種技術(shù)主要使用在用來保存用戶個人信息,例如用戶的密碼,代號等等上面。它主要使用了ADO的一些屬性。同時也回答了一些網(wǎng)友曾經(jīng)提到過的能否在Application中使用ADO對象的問題。解釋不清楚,下面讓代碼來發(fā)言:
文件GLOBAL.ASA:

 

復制代碼代碼如下:

<!--METADATA TYPE="TypeLib" FILE="C:\Program Files\Common   
Files\system\ado\msado15.dll"-- >    
< SCRIPT LANGUAGE=VBScript RUNAT="Server" >    
Sub Application_OnStart    
SQL = "Select UserName, Password FROM UserInfo"    
cnnUsers = "DSN=User"    
Set rsUsers = Server.CreateObject("ADODB.Recordset")    
'注意下面這兩句話,就是用來實現(xiàn)那個叫可用的斷開連接的ADO技術(shù)    
rsCustomers.CursorLocation = adUseClient    
rsCustomers.Open SQL, cnnAdvWorks, adOpenStatic, AdLockReadOnly    
' 斷開RecordSet的和數(shù)據(jù)庫的連接    
rsCustomers.ActiveConnection = Nothing    
Set Application("rsCustomers") = rsCustomers    
End Sub

 

文件Users.ASP

復制代碼代碼如下:

< %    
'Clone方法使得每個用戶擁有自己的一個RecordSet集合    
Set yourUsers = Application("rsUsers").Clone    
Set UserName = yourUsers("UserName")    
Set Password = yourUsers("Password")    
Do Until yourUsers.EOF    
% >    
 
用戶姓名:< %= UserName % > 用戶密碼:< %= Password % > 
 
< %    
yourUsers.MoveNext    
Loop    
% >

 

于緩存的作用,我想我也不用再多說了,它的作用已經(jīng)很明顯,特別是對于信息量非常大或是全數(shù)據(jù)庫頁面的網(wǎng)站,他能很好地利用主機的內(nèi)存資源,加速ASP的執(zhí)行效率,減輕服務器的負擔,而動網(wǎng)在這一方面做得是最突出的,像他現(xiàn)在的dvbbs7.1.0版,更是在緩存的利用上更上一層樓,前后臺大多的操作都和緩存有關(guān),而現(xiàn)在動網(wǎng)里用的也就是迷城浪子的緩存類:

 

復制代碼代碼如下:

< %    
Class Cls_Cache    
'==================使用說明====================    
'本類模塊是動網(wǎng)先鋒原創(chuàng),作者:迷城浪子。如采用本類模塊,請不要去掉這個說明。
'公有變量:Reloadtime 過期時間(單位為分鐘)缺省值為14400    
'MaxCount 緩存對象的最大值,超過則自動刪除使用次數(shù)少的對象。缺省值為300    
'CacheName 緩存組的總名稱,缺省值為"Dvbbs",如果一個站點中有超過一個緩存組,則需要外部改變這個值。    
'屬性:Name 定義緩存對象名稱,只寫屬性。    
'屬性:value 讀取和寫入緩存數(shù)據(jù)。    
'函數(shù):ObjIsEmpty()判斷當前緩存是否過期。    
' 方法:DelCahe(MyCaheName)手工刪除一個緩存對象,參數(shù)是緩存對象的名稱。    
'========================    
Public Reloadtime,MaxCount,CacheName    
Private LocalCacheName,CacheData,DelCount    
 
Private Sub Class_Initialize()    
Reloadtime=14400 '過期時間(單位為分鐘)    
CacheName="Dvbbs" '緩存組的總名稱    
End Sub    
 
Private Sub SetCache(SetName,NewValue)    
Application.Lock    
Application(SetName) = NewValue    
Application.unLock    
End Sub    
 
Public Property Let Name(ByVal vNewValue) '緩存對象名稱    
LocalCacheName=LCase(vNewValue)    
End Property    
 
Public Property Let Value(ByVal vNewValue) '讀取和寫入緩存數(shù)據(jù)    
If LocalCacheName<>"" Then    
CacheData=Application(CacheName"_"&LocalCacheName)    
If IsArray(CacheData) Then    
CacheData(0)=vNewValue    
CacheData(1)=Now()    
Else    
ReDim CacheData(2)    
CacheData(0)=vNewValue    
CacheData(1)=Now()    
End If    
SetCache CacheName"_"&LocalCacheName,CacheData    
Else    
Err.Raise vbObjectError + 1, "DvbbsCacheServer", " please change the CacheName."    
End If    
End Property    
 
Public Property Get Value()    
If LocalCacheName<>"" Then    
CacheData=Application(CacheName"_"&LocalCacheName)    
If IsArray(CacheData) Then    
Value=CacheData(0)    
Else    
Err.Raise vbObjectError + 1, "DvbbsCacheServer", " The CacheData Is Empty."    
End If    
Else    
Err.Raise vbObjectError + 1, "DvbbsCacheServer", " please change the CacheName."    
End If    
End Property    
 
Public Function ObjIsEmpty() '判斷當前緩存是否過期    
ObjIsEmpty=True    
CacheData=Application(CacheName"_"&LocalCacheName)    
If Not IsArray(CacheData) Then Exit Function    
If Not IsDate(CacheData(1)) Then Exit Function    
If DateDiff("s",CDate(CacheData(1)),Now()) < 60*Reloadtime Then ObjIsEmpty=False    
End Function    
 
Private Sub makeEmpty(SetName) '釋放內(nèi)存    
Application.Lock    
Application(SetName) = Empty    
Application.unLock    
End Sub    
 
Public Sub DelCahe(MyCaheName) '刪除緩存    
makeEmpty(CacheName"_"&MyCaheName)    
End Sub    
End Class    
 
'Set WydCache=New Cls_Cache    
'WydCache.Reloadtime=0.5 '定義過期時間 (以分鐘為單位)    
'WydCache.CacheName="pages" '定義緩存名    
'IF WydCache.ObjIsEmpty() Then ''判斷是否可用(包括過期,與是否為空值)    
'Response.write WydCache.Value    
'Else    
'..................    
'BoardJumpList=xxx    
'WydCache.Value=BoardJumpList '寫入內(nèi)容    
'Response.write BoardJumpList    
'End if    
'    
'mycache.DelCahe(" 緩存名") 刪除緩存    
%>

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 久久久国产一区二区三区 | 中文字幕国产一区 | 北条麻妃一区二区三区在线观看 | 国内精品一区二区 | 日韩成人精品在线 | 日韩高清中文字幕 | 欧美一区二区三区成人 | 欧美国产精品一区 | 国产成人av在线 | 精品无人乱码一区二区三区 | 亚洲视频在线一区 | 成人高清| 欧美精品久久久久 | 亚洲精品欧美精品 | 国产欧美日韩一级大片 | 波多野吉衣网站 | 久久久精品一区二区 | 久久久婷| 亚洲精品视频在线观看免费 | 天天躁日日躁aaaaxxxx | 亚洲一区二区三区四区的 | av激情在线 | 国产精品国色综合久久 | 色嫩紧中文字幕在线 | 中文字幕在线第一页 | 欧美精品成人一区二区三区四区 | 欧美精品一二三区 | 日本三级一区二区 | 综合久久99| 国产精品爱久久久久久久 | 国产做a爰片久久毛片a我的朋友 | 午夜成人免费电影 | 欧美二区三区 | 国产一区二区三区在线视频 | 国产高潮呻吟av | 91精品国产乱码久久久久久久久 | 激情久久久 | 天天综合久久 | 欧美成人一区二区三区片免费 | 国产精品九九久久99视频 | 成人在线一区二区 |