はい :
ページのどの部分が「プロセッサに負荷がかかる」かを指定していませんが、SQLデータのクエリと処理であると想定します。1つのアイデアは、データを取得して、ファイルシステムにキャッシュファイルとして保存することです。XMLはデータ形式に適しています。
元のコードは次のようなものですが、
(psuedocode)
get results from database
process results to generate html file
...変更したコードは次のようになります。
check if cache file exists
if not exist
get results from database
store results in cache file
get results from cache file
process results to generate html file.
これは一般的なキャッシュアプローチであり、出力を決定するクエリパラメータがある状況に適用できます。すべての構成パラメータに基づいて、キャッシュファイルの名前を生成するだけです。したがって、結果がp1およびp2という名前のクエリパラメータに依存している場合、p1
およびにそれぞれp2
値1234
とがblue
ある場合、キャッシュファイルの名前は 。になりますcache-1234-blue.xml
。5つの異なるクエリがある場合は、それらをとしてキャッシュできquery1-1234-blue.xml
ますquery2-1234-blue.xml
。
これを「毎晩」行う必要はありません。コードにキャッシュの有効期間を含めることができ、「キャッシュファイルが存在する場合」テストの代わりに、「キャッシュファイルが存在し、新しい場合」を使用します。これを行うには、キャッシュファイルで最後に変更されたタイムスタンプを取得し、それがキャッシュの有効期間よりも古いかどうかを確認します。
Function FileOlderThan(fname, age)
'function returns True if the file is older than the age,
' specified in minutes.
Dim LastModified, FSO, DateDifference
Set FSO = CreateObject("Scripting.FileSystemObject")
LastModified = FSO.GetFile(fname).DateLastModified
DateDifference = DateDiff("n", LastModified, Now())
If DateDifference > age Then
FileAge = False
Else
FileAge = True
End If
End Function
fname = Server.MapPath(".") & cacheFileName
If FileOlderThan(fname, 10) Then
... retrieve fresh data ...
End If
これは、10分、10時間、10リクエストなど、好きなようにできます。
キャッシュファイルのデータ形式にはXMLが適していると前述しました。ADOにはSaveAsXMLメソッドがあり、クエリに追加された句を使用してSQL2008から直接XMLを生成することもできFOR XML
ます。
「プロセッサが重い」部分がクエリと取得ではなく、htmlページの生成である場合は、同じ種類のアプローチを適用できますが、htmlファイルを直接キャッシュするだけです。