1. ASP キャッシュとは何ですか? なぜキャッシュする必要があるのですか? 最初に ASP テクノロジを使用して Web サイトを構築したとき、ASP 動的 Web ページ テクノロジによってもたらされる利便性、および変更の自由と無料の http コントロールを感じるかもしれません。ただし、アクセス数が増えると、サイトのアクセス速度がどんどん遅くなり、IIS が再起動する頻度が高くなることは間違いありません。次に、パフォーマンスが向上するデータベースの置き換え、インデックスの作成、ストアド プロシージャの作成など、ASP を最適化する必要があります。これらの対策の中には、コストの増加を必要としないものもありますが、大幅なコストの圧力を必要とするもの (SQL へのクラスタリング アクセスなど) もあり、その効果は必ずしも確実ではありません。
Web アクセスのプレッシャーに直面した場合、最も経済的な方法は、キャッシュ最適化テクノロジーを使用して Web サービスのプレッシャーを軽減することだと思います。
Web トラフィックの増加は、多くの場合、次のリソースに対する需要の急速な増加を意味します。
1. ネットワーク カード トラフィックの増加により、ネットワーク トラフィックとネットワーク I/O スレッドを処理するためにより多くの CPU が必要になります。
2. データベース接続をより頻繁に開閉する必要性 (データベース テクノロジが使用されている場合 - 通常、ASP はデータベースをデータ ストレージとして使用します)、リソースを大幅に消費するものの数、およびリソースの競合によるトランザクションによって引き起こされるデッドロックにより、ネットワーク I/O が増加します。 O または CPU 消費量。
3. セッションが使用されている場合、IIS は状態を維持するためにより多くのメモリを消費します。メモリ消費により物理メモリが不足し、物理メモリと補助メモリの間で頻繁な交換が発生し、コードの実行が一時停止し、Web 応答がブロックされる可能性があります。 。
4. アクセスに対するタイムリーな応答がないため、Web ページへのアクセスが失敗し、ユーザーが更新されることになり、CPU やメモリなどのリソースの需要が増大します。
実際、一般的な Web アプリケーションを考慮すると、多くの場合、動的なコードの実行は不要です。
2. ASP キャッシュの分類は、承認なしで次の 2 つのカテゴリに分類できます。
1. ファイル キャッシュ。いわゆるファイル キャッシュは、特定の ASP の実行が一定期間内に大幅に変更されないという論理的判断に基づいています。そのため、コンテンツは静的 HTML の形式で保存されます。 Web リダイレクト テクノロジーは、顧客が静的ファイルにエンドツーエンドでアクセスできるようにするために使用され、CPU やデータベース リソースなどの必要性を軽減します。たとえば、donews.com フォーラムなど、多くのフォーラムでは、投稿に返信するときに投稿全体を静的ファイルに再生成し、リダイレクトします。静的であることの副作用 (利点) もあります。Google などの検索エンジンによって簡単にインデックス付けされる可能性があります。いわゆるニュース リリース システムの一部には、このテクノロジーが採用されています。
2. ファイル フラグメント キャッシュ。いわゆるファイル キャッシュも、データの特定の部分 (通常はリソースを消費する大容量データベースへのクエリによって取得) が一定期間内に変更されないことに基づいています。これらのデータはファイルの形式で保存でき、必要に応じてファイルを読み取ってデータを取得できるため、データベースへの負担が増大することはありません。たとえば、通常、一部のデータを XML 形式で保存し、次を使用します。これが CSDN フォーラムの処理方法です。
3. メインメモリキャッシュ さらに、タイムリーな応答が必要なコンテンツをメモリに保存し、アクセスが必要になったらすぐに高速なストレージから転送する、メモリへのキャッシュも検討できます。非常に多くのアクセス要件がいくつかの小さなページに集中している場合、またはメイン メモリが十分な大きさである場合、メイン メモリ キャッシュを使用すると、Web アクセスのパフォーマンスが大幅に向上することが確実にあると思います。
3. キャッシュの実装/使用方法 キャッシュを実装するには、次の問題を考慮する必要があります。
1. 短期間では変更されないページはどれですか?
自分のサイトを分析してみると、そのようなページがたくさんあります。たとえば、Web サイトには通常、ニュースや情報のコラムがあり、これらのコラムは通常、サイト管理者によって 1 日の特定の時間に投稿され、その後ページが変更されることはほとんどありません。したがって、これらのページは静的ファイルのキャッシュに適しています。実際、これはいわゆるニュースリリースシステムが行っていることなので、これらのシステムの考え方を参考にして、オリジナルのダイナミック ASP ページを変革することもできます。
2. これらのページは、すべての訪問者に対して同じロジックを使用して生成されます (つまり、訪問者は区別されません)。
すべての訪問者が同じインターフェイスを参照するニュースや情報などのコラムに加えて、フォーラムなどのリソースを消費するアプリケーションは一般に、統一されたロジックを生成するように設計できます (同じ投稿は 3 人でも 3 人でも同じように表示されます)。このようなアプリケーション ページも、静的キャッシュを使用して実現できます。データを断片化し、スクリプト テクノロジを使用して、サーバー (クライアント ブラウザー) の処理能力を超えてデータを処理することも検討できます。
3. キャッシュを使用するコストと利点。
重要なのは「(応答)時間のためのスペース」です。キャッシュ テクノロジを使用して、将来頻繁に必要になるコンテンツを前処理して、Web サーバーの応答性を向上させ、さらに重要なことに、訪問者の好意を獲得します。
その代償として、Web スペースの需要が増加し、同時にアクセス効果に影響が出る可能性があります。
しかし、適切なキャッシュにはデメリットよりもメリットの方が多いと思います。
4. これらの場所は、動的クエリ ページのキャッシュには適していません。クエリの内容は人それぞれ異なるため、クエリ結果をキャッシュすることはできません。そのため、キャッシュがより複雑になり、キャッシュの使用率が低くなります。管理上の問題が発生します (1,000 個のクエリ キーワードをキャッシュすると仮定すると、これらのキーワードとキャッシュの対応関係を管理するのも面倒になります)。
4. 分析例 提案フォーラムの元のレイアウトは次のとおりであると仮定します。
ルート ディレクトリの下:
default.asp ホームページ、通常はハイライト、推奨事項など。
listBorad.asp このファイルには、すべての列の名前と概要がリストされます。MainBID パラメーターが指定されている場合は、セクションの下の列がリストされることを意味します。
listThread.asp このファイルがパラメータを持たない場合は、すべての投稿をリストすることを意味し、MainBID を運ぶ場合は、特定のブロック内のすべての投稿をリストすることを意味します。 subBID が指定されている場合は、特定の列に投稿をリストすることを意味します。 page パラメータが指定されている場合、トピックはページ内にリストされます。
ViewThread.asp は、投稿のコンテンツを一覧表示します。投稿がコメントとして表示され、コメントがあれば最後にリストされることを想定しています。 IDパラメータは表示する投稿です。
Reply.asp は特定の投稿に応答し、特定の投稿に返信するためのパラメーター Id を運びます。残りについては、当面は説明しません。
上記のことから、すべてがオリジナルの ASP/PHP を使用して行われる場合、ほぼすべての ASP ファイルの実行にはデータベース操作、頻繁なクエリ、および複数テーブルのクエリが必要であることがわかります。データベースにクエリを実行すると、最終的にパフォーマンスと応答速度の低下につながり、訪問者のブラウジングが遅くなり、Web の品質が低下することを知っておく必要があります。さらに重要なのは、A と B の 2 人が ViewThread.asp などにアクセスすると、ID が同じであれば何度も同じ内容が表示されることです (ブラウザが受信する HTML コードはほぼ同じです)。同じ) ただし、この「同じコンテンツ」の場合、サーバーはデータベース接続を開いて、クエリを実行し、レコードを読み取り、表示し、レコードとデータベース接続を閉じる必要があります。 。 。 。サーバー リソースを消費する次の操作にアクセスする人が増えると、最終的には、これらのユーザーがサーバー リソースをより多く消費することになります。実際、このような「同じコンテンツ」に対する繰り返しの作業は、キャッシュ技術を使用して最適化することで回避できます。例えば:
Reply.asp でコンテンツを送信した後、すぐに静的関数を呼び出し、投稿コンテンツ全体を viewThread_xxxx.htm などの静的 HTML ファイルとして保存します。通常の状況では、viewThread.asp?ID=xxxx にアクセスすると、システムは自動的にリダイレクトします。対応する静的ファイル viewThreadxxxx.htm にコピーします。このようにして、投稿に最新のリリースがない場合は、常に静的なコンテンツが閲覧者に提供されます。新しい投稿があると、静的なファイルに更新されます。このようにして、多くのデータベース操作が保存されます。そしてレスポンスが大幅に向上します。
listBorad.asp は静的に実装することもできます。保持するパラメーターを分析し、キャッシュ ファイル名を listBoard_xx.htm に設定し、新しい列を追加するときに listBoard_xxx.htm を更新できます。 listThread.asp も似ていますが、より多くのパラメーターがあるため、大量のキャッシュ ファイルが存在する点が異なります。 listThread.asp?subBID=xxx&page=2 をキャッシュする場合、対応する静的ファイルは listThread_xxx_p2.htm です。同じことがdefault.aspにも当てはまります。
では、いつ更新するかをどうやって判断すればよいのでしょうか?いつ更新されますか?
listThread.asp? subBID=xxx&page=2 については、listThread.asp の実行時に subID と page を抽出し、listThread_xxx_p2.htm が存在するかどうかを検出し、存在しない場合は静的生成関数を呼び出してファイルを生成し、最後にリダイレクトします。ここでは静的ファイルです。ここに存在しないということは、更新する必要がある新しいコンテンツがあることを意味することに注意してください。
では、ファイルが存在しないようにするにはどうすればよいでしょうか?消去。新しい投稿を公開したり、投稿を削除したり、投稿を移動したりすると、listThread_xxx_p2.htm などのすべての静的ファイルを削除できます。これにより、いつキャッシュするかがわかります。
ここで、静的ファイルを生成する方法という疑問が 1 つ残っています。
前述した「同じ内容」であることに注意してください。変換前に、default.asp、listThread.asp などのコピーを、default_d.asp、listThread_2.asp という名前で同じディレクトリに作成できます (理論上、listThtrad.asp?subID=123 は LISTtHREAD_D.ASP と同じです)。 ?SUBID=123のアクセス結果も同じ内容となります)ので、静的ファイルを生成する必要があるロジックでは、WEBアクセスリクエストで変換前のコピーを呼び出し、htmlコードを取得し、静的ファイルとして保存します。この Web リクエストは、実際には、実際のブラウザが静的コンテンツにアクセスする前に出力される HTML をサーバー自体が表示し、これらのコードを返し、ファイル操作関数を使用して静的ファイルとして保存することに相当します。このようにして、実際のビューアの前にキャッシュ ファイルが作成されます。
このような解決策は元のレイアウトにほとんど影響せず、変更によって 404 などのエラーが発生することはほとんどありません。次に、静的ファイルは、Google などの検索エンジンによってサイトが簡単にインデックスされるのにも役立ちます。なぜだめですか?
最後に、ASP プログラミング環境では、Web アクセスを通じて、多くの人が xmlHTTP コンポーネントを使用してアクセスするため、多くの問題が発生することを思い出してください。 xmlhttp 自体が要求されたリソースをキャッシュするため、このコンポーネントを通じて要求したコンテンツが最新ではなくなり、論理的な混乱が生じます。したがって、Web リクエスト リソースを実装するには、xml Server http オブジェクトまたは winhttp コンポーネントを選択する必要があります。
ASP でキャッシュ テクノロジを使用すると、Web サイトのパフォーマンスが大幅に向上します。実際、これらの実装方法は、サーバー上でのキャッシュの仕組みと、ADO 接続テクノロジと呼ばれる方法の使用方法について説明します。
これらのテクノロジーを紹介する前に、ASP キャッシュ テクノロジーとは一体何なのかを説明しましょう。
いわゆるキャッシュとは、実際にはデータを保存するためにメモリ内にスペースを空けることです。キャッシュを使用することで、ハードディスクに保存したデータに頻繁にアクセスする必要がなくなります。貧弱なハードディスクがいっぱいになるのを見るのは苦痛です。クエリを実行し、クエリ結果をキャッシュに保存すると、繰り返しデータにすばやくアクセスできるようになります。また、データをキャッシュに入れないと、クエリを再度実行するときに、サーバーはデータベースからデータを取得して並べ替えるプロセスに時間を費やします。
データがキャッシュに保存されている場合、再度クエリを実行するときにかかる時間は主にデータの表示時間になります。
言い換えれば、頻繁に変更する必要があるデータをサーバーのキャッシュに置くべきではなく、変更は少ないが頻繁にアクセスする必要があるデータをキャッシュに置く必要があります。
次に、ASP がサーバー側でキャッシュ テクノロジを使用する方法について説明し、次に ASP がクライアント側でキャッシュ テクノロジを使用する方法について説明します。
クライアントに表示する必要がある大量のデータ (静的、つまり変化が少ない) がある場合は、サーバー側のキャッシュ テクノロジの使用を検討できます。このテクノロジーは、表示スタイルの一貫性が高い Web サイトに特に適しています (笑、非主流の Web サイトに使用するのは簡単ではありません)。
実際、実装方法は非常に簡単です。以下の簡単な例を見るだけで理解できます。
本のカテゴリを表示するサンプルプログラムです。
DisplayBooks.ASP ファイル:
< %@ LANGUAGE=JavaS
スクリプト % >
<html>
<本文>
<フォームメソッド=ポスト>
書籍の分類; < %= getBooksListBox() % >
<p>
<入力タイプ=送信>
<%
関数 getBooksListBox()
{
BooksListBox = アプリケーション("BooksListBox")
if (BooksListBox != null) は 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("書籍", "管理者","");
rstBooks = cnnBooks.Execute(SQL);
fldBookName = rstBooks("書籍名");
while (!rstBooks.EOF){
BooksListBox = BooksListBox + ” < オプション>” +
fldBookName + "" + crlf;
rstBooks.MoveNext();
}
BooksListBox = BooksListBox + ""
Application("BooksListBox") = BooksListBox
BooksListBox を返します。
}
%>
実際、これは非常に単純なアプリケーション テクノロジを使用しており、違いは 1 つの文だけです。
Application("BooksListBox") = BooksListBox
これを検証すると、サーバー上のリクエストの数が大幅に減少していることがわかります。この状況は、1 日に 1 回 (または長時間) しか更新しない Web サイトのコンテンツなど、あまり頻繁に更新されない Web サイトのコンテンツに特に適しています。
次に、クライアント側のキャッシュ テクノロジについて説明します。このテクノロジは、切断された ADO 接続テクノロジとも呼ばれます (翻訳レベルが低すぎるため、非常にぎこちなく聞こえます)。この技術は主に、ユーザーのパスワードやコード名などのユーザーの個人情報を保存するために使用されます。主に ADO のいくつかのプロパティを使用します。同時に、ADO オブジェクトを Applocation で使用できるかどうかについて一部のネチズンが言及した質問にも答えます。説明が明確ではないので、コードで説明してみましょう。
ファイル GLOBAL.ASA:
< !–METADATA TYPE=”TypeLib” FILE=”C:Program FilesCommon
ファイルシステムadomsado15.dll”–>
< スクリプト言語=VBScript RUNAT=”サーバー” >
サブアプリケーション_OnStart
SQL = 「UserInfo からユーザー名とパスワードを選択」
cnnUsers = “DSN=ユーザー”
Set rsUsers = Server.CreateObject("ADODB.Recordset")
次の 2 つの文は、利用可能な切断と呼ばれる ADO テクノロジを実装するために使用されていることに注意してください。
rsCustomers.CursorLocation = adUseClient
rsCustomers.Open SQL、cnnAdvWorks、adOpenStatic、AdLockReadOnly
' RecordSet をデータベースから切断します
rsCustomers.ActiveConnection = なし
Set Application("rsCustomers") = rsCustomers
エンドサブ
ファイルユーザー.ASP
<%
'Clone メソッドを使用すると、各ユーザーが独自の RecordSet コレクションを持つことができます
yourUsers = Application("rsUsers").Clone を設定します。
ユーザー名 = yourUsers("ユーザー名") を設定します。
パスワードを設定 = yourUsers("パスワード")
yourUsers.EOF まで実行します
%>
ユーザー名: < %= UserName % > ユーザーパスワード: < %= Password % >
<%
yourUsers.MoveNext
ループ
%>