ASP がリリースされてから 7 年が経過し、ASP テクノロジの使用がかなり成熟してきました。Microsoft は ASP.NET を開始して以来、ASP バージョンの更新を徐々に停止してきました。しかし、多くの人は依然として ASP を使用して Web サイトを開発することに慣れているため、もう一度簡単な例を使用して ASP でキャッシュを使用する方法を説明します。
簡単に言うと、キャッシュを使用する基本原理は、頻繁に必要になる高価なデータを一定期間メモリに保存し、これらのデータに直接かつグローバルにアクセスできるようにすることです。たとえば、データベース内の複数のテーブルからクエリを実行する必要があるデータがあり、ほぼすべてのページでこのデータを呼び出す必要があります。この場合の最良の実装は、データのこの部分をキャッシュすることです。ASP での簡単な実装は、これらのデータの最終的な表現形式 (HTML ストリームなど) を文字列にカプセル化し、それを ASP 組み込みオブジェクトに格納することです。アプリケーション (この記事では主に動的キャッシュについて説明します。単純な ASP アプリケーションは省略します)。この利点は、この HTML が Web サイト全体でグローバルに呼び出すことができ、アプリケーションがメモリに保存されるため、データベースにクエリを実行する必要がないため、応答時間が短縮され、サーバーの負荷が軽減されることです。もちろん、これにはメモリ消費が犠牲になり、空間と時間を交換する典型的な例です。
この方法を使用することには多くの利点がありますが、データ ソース (データベース) が頻繁に変更される場合には、この方法は適用できなくなる可能性があります。ASP アプリケーション オブジェクトには欠点があるためです。つまり、データ ソースの変更に応じて自動的に変更できないからです。 . 更新間隔を変更または制御します。したがって、開発者は動的キャッシュを実装するためのプログラムを作成する必要があります。もちろん、プログラムの設計中に、データ ソース (データベース) が変更されるたびにアプリケーションを更新することもできます。したがって、データ ソース (データベース) は常に一貫しています。プログラミングで考慮すべき問題はさらに多くなり、細部を見落としがちになります。したがって、特定の状況以外ではこの方法はお勧めしません。
ASP における最善の方法は、プログラミングを使用してキャッシュを定期的に更新すること、つまりアプリケーションに保存されているデータの有効期限を設定することだと思います。もちろん、ASP の Application オブジェクトにはそのような ExpireTime 属性はありません。これはプログラムで実装する必要があります。
コード
ASP:default.asp
< %@Language=VBScript% >
<%オプション明示%>
<%Response.Buffer=True%>
<!--#include file = "conn.asp"-->
<!--#include file = "GetCache.asp"-->
<HTML>
<頭>
<TITLE>ASP キャッシュのデモ</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb2312">
</HEAD>
<本体>
<h4>10 秒ごとにキャッシュを更新:</h4>
<%
応答.フラッシュ
GetHTMLStream
応答.書き込み
HTMLストリーム
%>
</body>
</html>
ASP:getcache.asp
<%
Const CACHE_DEFAULT_INTERVAL = 30 ' 30 秒ごとにキャッシュを更新します
薄暗いHTMLストリーム
DimIsExpires
IsExpires = キャッシュ期限切れ
関数キャッシュの期限切れ
ディム strLastUpdate
暗い結果 strLastUpdate = Application("LastUpdate")
If (strLastUpdate = "") または (CACHE_DEFAULT_INTERVAL < DateDiff("s", strLastUpdate, Now)) then
結果 = true
SetLastUpdateTime
それ以外
結果 = false
終了の場合
CacheExpires = 結果
終了関数
サブセットLastUpdateTime
アプリケーション.ロック
Application("LastUpdate") = CStr(now())
アプリケーション.ロック解除
End Sub
Sub GetHTMLStream
期限切れの場合
HTMLストリームの更新
終了の場合
HTMLStream=アプリケーション("CACHE_HTMLStream")
End Sub
Sub UpdateHTMLStream
薄暗い
d = フェッチHTMLストリーム
アプリケーション.ロック
アプリケーション("CACHE_HTMLStream") = d
アプリケーション.ロック解除
End サブ
関数 FetchHTMLStream
Dim rs、strSQL、strHTML
Set rs = CreateObject("ADODB.Recordset")
strSQL = "カテゴリから categoryID 、 categoryname を選択"
rs.Open strSQL、strConn、adOpenForwardOnly、adLockReadOnly
strHTML = strHTML & "<select name=""slt_search"">"
while (rs.EOF ではない)
strHTML = strHTML & "<オプション>"
strHTML = strHTML & rs.Fields("カテゴリ名")
strHTML = strHTML & "</option>" rs.MoveNext
曲がります
strHTML = strHTML & "</select>"
rs.閉じる
Setrs=なし
FetchHTMLStream = strHTML
終了機能
%>
ASP: conn.asp
<!--METADATA NAME="Microsoft ActiveX Data Objects 2.5 Library" TYPE="TypeLib" UUID="{00000205-0000-0010-8000-00AA006D2EA4}"-->
<%
ディムストラコン
strConn = "プロバイダー = SQLOLEDB.1;統合セキュリティ = SSPI;永続セキュリティ情報 = False;初期カタログ = Northwind"
%>