ヒント 1: Request コレクションの使用効率を向上させる
ASP コレクションにアクセスして値を抽出するのは、時間がかかり、計算リソースを大量に消費するプロセスです。この操作には関連コレクションに対する一連の検索が含まれるため、ローカル変数にアクセスするよりもはるかに時間がかかります。したがって、ページ上で Request コレクションの値を複数回使用する予定がある場合は、それをローカル変数として保存することを検討する必要があります。たとえば、スクリプト エンジンの処理を高速化するには、次の形式でコードを記述します。
strTitle=Request.Form("Title")
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
Wend は、
実行を高速化するために次のコードとして書き換えることができます:
set GcMc=RsGc("GcMc")
set GcCode=RsGc("GcCode")
While Not rsGc.EOF Response.Write "プロジェクト名: " & GcMc & " (プロジェクト コード: " & GcCode & ")
" RsGc.MoveNext
Wend
?? 新しいコードはオブジェクト変数への参照を確立するため、実際の変数の代わりにオブジェクト変数を使用できます。つまり、コレクションへのインデックスが少なくなるため、スクリプト エンジンの作業が少なくなります。
??ヒント 5: スクリプト エンジンを混合しないでください
??VBScript と JScript の両方が ASP ページで使用できることはわかっています。ただし、同じページで JScript と VBScript を同時に使用することはお勧めできません。サーバーは (1 つではなく) 2 つのスクリプト エンジンをインスタンス化してキャッシュしようとする必要があるため、システムの負荷がある程度増加します。したがって、パフォーマンス上の理由から、同じページに複数のスクリプト エンジンを混在させないでください。