ASP ページを開くとき、ページはデータベースにアクセスし、要件を満たすコンテンツをページに表示する必要があります。データベース内のレコードが多い場合、ページのアクセス速度が相対的に遅くなります。次の方法を使用してページのアクセス速度を改善できます。
ヒント 1: Request コレクションの使用効率を向上させる
ASP コレクションにアクセスして値を抽出するのは、時間がかかり、計算量が多いプロセスです。この操作には関連コレクションに対する一連の検索が含まれるため、ローカル変数にアクセスするよりもはるかに時間がかかります。したがって、ページ上で Request コレクションの値を複数回使用する予定がある場合は、それをローカル変数として保存することを検討する必要があります。
たとえば、スクリプト エンジンの処理を高速化するには、次の形式でコードを記述します。
次のようにコードをコピーします。
strTitle=Request.Form("タイトル")
strFirstName=Request.Form("名")
strLastName=Request.Form("姓")
If Len(strTitle) then strTitle=strTitle & " "
strFirstName="" の場合、strFullName=strTitle & " " & strLastName
Elseif Len(strFirstName)=1 次に
strFullName=strTitle & strFirstName & ". " & strLastName
それ以外
strFullName=strTitle & strFirstName & " " & strLastName
終了の場合
ヒント 2: 適切なコレクションに直接アクセスする
選択肢がない場合は、パラメータの取得に strPage=Request("page") を使用しないでください。これにより、最初の一致が見つかるまで、コレクション全体 (QueryString、Form、Cookies、ClientCertificate、ServerVarible) が順番に検索されます。価値。そうすることは、適切なコレクションに直接アクセスするよりも効率が低く、値が別のコレクションに表示されないという絶対的な保証がない限り安全ではありません。
たとえば、クライアントの要求を満たす WEB サーバーの名前を検索するには、各クエリに表示される Request.ServerVarables コレクションで "SERVER_NAME" を検索します。ただし、他のコレクションにも「SERVER_NAME」という名前の値が含まれている場合 (キー名は大文字と小文字が区別されません)、Request("server_Name") を使用すると、誤った結果が得られます。要約すると、可能な限り、適切なコレクションに直接アクセスする必要があります。
ヒント 3: 時間のかかる操作を行う前に、Response.IsClientConnected プロパティを使用する
Response.IsClientConnected を使用すると、ユーザーがまだサーバーに接続しており、ASP によって作成された Web ページを読み込んでいるかどうかを観察するのに便利な方法です。ユーザーが切断するかダウンロードを停止すると、バッファーの内容は IIS によって破棄されるため、Web ページの作成にサーバー リソースを無駄にする必要がなくなりました。したがって、計算に多くの時間を必要としたり、多くのリソースを使用したりするページの場合は、訪問者がオフラインかどうかをあらゆる段階で確認する価値があります。
次のようにコードをコピーします。
… ページの最初の部分を作成するコード
Response.IsClientConnected の場合
レスポンス.フラッシュ
それ以外
応答.終了
終了の場合
… ページの次の部分を作成するコード
ヒント 4: ASP での ADO 操作を最適化する
一般に、データは WEB サイトの実際のコンテンツを構成します。したがって、ADO 操作を最適化して ASP コードの実行を高速化することは非常に役立ちます。
a. 必要な列のみを選択します: ADO レコードセットを開くとき、すべての列を取得する必要がない限り、テーブル名 (つまり SELECT *) を自動的に使用しないでください。個別の列を使用すると、サーバーに送信またはサーバーから取得されるデータの量が削減されます。すべての列を使用する必要がある場合でも、サーバーが列名を解釈する必要がないため、各列に個別に名前を付けると最高のパフォーマンスが得られます。
b. 可能な限りストアド プロシージャを使用します。ストアド プロシージャは、準備された実行プランを含むプリコンパイルされたプログラムであるため、SQL ステートメントよりも高速に実行されます。
c. 適切なカーソルとロックのパターンを使用します。レコードセットからデータを読み取って画面に表示するだけの場合は、デフォルトの前方専用、読み取り専用のレコードセットを使用します。レコードとロックの詳細を維持するために ADO が行う必要がある作業が少ないほど、ADO のパフォーマンスは向上します。
d. オブジェクト変数を使用します。レコードセットを反復処理する際のパフォーマンスを確実に向上させる方法は、オブジェクト変数を使用してコレクションのメンバーを指すことです。例えば:
次のようにコードをコピーします。
RsGc.EOF ではない間
Response.Write "プロジェクト名:" & RsGc("GcMC") & "(プロジェクトコード:" & RsGc("GcCode") & ")"
RsGc.MoveNext
ウェン
これを次のコードとして書き直すと、実行速度が向上します。
次のようにコードをコピーします。
set GcMc=RsGc("GcMc")
set GcCode=RsGc("GcCode")
While Not rsGc.EOF Response.Write "プロジェクト名:" & GcMc & "(プロジェクト コード: " & GcCode & ")"
RsGc.MoveNext
ウェン
新しいコードはオブジェクト変数への参照を確立するため、実際の変数の代わりにオブジェクト変数を使用できます。つまり、コレクションへのインデックスが少なくなるため、スクリプト エンジンが行う作業が少なくなります。
ヒント 5: スクリプト エンジンを混合しないでください
VBScript と JScript の両方が ASP ページで使用できることはわかっています。ただし、同じページで JScript と VBScript を同時に使用することはお勧めできません。サーバーは (1 つではなく) 2 つのスクリプト エンジンをインスタンス化してキャッシュしようとする必要があるため、システムの負荷がある程度増加します。したがって、パフォーマンス上の理由から、同じページに複数のスクリプト エンジンを混在させないでください。