ASP從發布至今已經
年了
使用ASP技術已經相當成熟
自從微軟推出了ASP
NET之後就逐漸停止了對ASP版本的更新
但是由於有很多人仍然習慣使用ASP來開發網站
所以
再次我將以一個簡單的例子來說明在ASP中如何使用Cache
簡單的說使用Cache基本原理是
把經常需要且獲得代價昂貴的數據在內存中持續保存一定時間
以供這些數據可以被直接地全局地訪問
例如
有一些數據需要從數據庫多個表中查詢獲得
且幾乎每個頁面都要調用這些數據
這種情況下的最佳實現就是將這部分數據Cache起來
在ASP中的簡單實現就是將這些數據的最終表達形式(例如HTML流)封裝在string中然後存入ASP內置對象Application中(本文主要討論的是動態Cache
簡單的ASP 應用就省略)
這樣做的好處是
在整個網站中可以全局調用這段HTML
而且Application是存在內存中
所以不用再去查詢數據庫
從而加快了響應時間並節省了服務器負荷
當然這是以消耗內存為代價的
是一個典型的以空間換時間的實例
使用這種方法雖然有很多好處
但是再遇到頻繁變化的數據源(數據庫)的時候
這種方法就可能不再適用
因為ASP Application對象有一個缺點
就是不能自動隨數據源的變化而變化
或者控制刷新間隔
所以就需要開發人員編程來實現動態Cache
當然在程序設計的時候可以在所有進行改變數據源(數據庫)操作時
就更新一次Appliction
從而使數據源(數據庫)始終保持一致
這樣做在編程上要考慮的問題會比較多
容易遺漏細節
所以除了特定情況我不推薦使用這種方法
我認為在ASP中最好的辦法是用編程實現定時刷新Cache
也就是說給Application中儲存的設一個過期時間
當然
在ASP中Application對象沒有這樣一個ExpireTime屬性
這需要用程序實現
Code
ASP
default
asp
<%@Language=VBScript%>
<%Option Explicit%>
<%Response
Buffer=True%>
<!
#include file =
conn
asp
>
<!
#include file =
GetCache
asp
>
<HTML>
<HEAD>
<TITLE>ASP Cache演示</TITLE>
<META HTTP
EQUIV=
Content
Type
CONTENT=
text/html; charset=gb
>
</HEAD>
<BODY>
<h
>每隔
秒刷新Cache
</h
>
<%
response
Flush
GetHTMLStream
response
Write
HTMLStream
%>
</body>
</html>
ASP
getcache
asp
<%
Const CACHE_DEFAULT_INTERVAL =
每隔
秒刷新一次cache
Dim HTMLStream
Dim IsExpires
IsExpires = CacheExpires
Function CacheExpires
Dim strLastUpdate
Dim result strLastUpdate = Application(
LastUpdate
)
If (strLastUpdate =
) Or (CACHE_DEFAULT_INTERVAL < DateDiff(
s
strLastUpdate
Now)) Then
result = true
SetLastUpdateTime
Else
result = false
End If
CacheExpires = result
End Function
Sub SetLastUpdateTime
Application
Lock
Application(
LastUpdate
) = CStr(now())
Application
UnLock
End Sub
Sub GetHTMLStream
If IsExpires Then
UpdateHTMLStream
End If
HTMLStream=Application(
CACHE_HTMLStream
)
End Sub
Sub UpdateHTMLStream
dim d
d = FetchHTMLStream
Application
Lock
Application(
CACHE_HTMLStream
) = d
Application
UnLock
End Sub
Function FetchHTMLStream
Dim rs
strSQL
strHTML
Set rs = CreateObject(
ADODB
Recordset
)
strSQL =
select categoryID
categoryname from categories
rs
Open strSQL
strConn
adOpenForwardOnly
adLockReadOnly
strHTML = strHTML &
<select name=
slt_search
>
while (not rs
EOF)
strHTML = strHTML &
<option>
strHTML = strHTML & rs
Fields(
categoryname
)
strHTML = strHTML &
</option>
rs
MoveNext
wend
strHTML = strHTML &
</select>
rs
Close
Set rs = Nothing
FetchHTMLStream = strHTML
End Function
%>
ASP
conn
asp
<!
METADATA NAME=
Microsoft ActiveX Data Objects
Library
TYPE=
TypeLib
UUID=
{
AA
D
EA
}
>
<%
dim strConn
strConn =
Provider=SQLOLEDB
;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Northwind
%>
From:http://tw.wingwit.com/Article/program/net/201311/11337.html