ほとんどのアクティブサーバーページ(ASP)アプリケーションは、文字列連結を介してユーザーに提示されたHTML形式のデータを作成します。この記事では、このHTMLデータストリームを作成するためのいくつかの方法を比較し、特定の場合には、パフォーマンスの他の方法よりも優れている方法もあります。この記事では、ASPと視覚的な基本プログラミングに関する知識がすでにあることを前提としています。
ASPページを作成するとき、開発者は実際に、ASPが提供する応答オブジェクトを介してWebクライアントに書き込まれるフォーマットされたテキストストリームを作成します。このテキストストリームを作成するにはさまざまな方法があり、選択した方法は、Webアプリケーションのパフォーマンスとスケーラビリティに大きな影響を与えます。多くの場合、クライアントがWebアプリケーションのパフォーマンスを最適化するのを手伝ったとき、より効果的な方法の1つは、HTMLストリームの作成方法を変更することであることがわかりました。この記事では、いくつかの一般的な手法を紹介し、簡単なASPページのパフォーマンスに対する影響をテストします。
多くのASP開発者は、優れたソフトウェアエンジニアリングの原則に従い、可能な限りコードをモジュール化しています。通常、この設計では、ページの特定の不連続な部分をフォーマットする関数を含むファイルが含まれます。これらの関数の文字列出力(通常はHTMLテーブルコード)は、さまざまな組み合わせを通じて完全なページを作成できます。一部の開発者は、これらのHTML関数を視覚的な基本コムコンポーネントに移動し、コンパイルされたコードが提供する追加のパフォーマンスを活用したいと考えて、このアプローチを改善しました。
この設計アプローチは良好ですが、これらの不連続なHTMLコードコンポーネントを構成する文字列を作成するために使用される方法は、実際の操作がASPで実行されるか、視覚的な基本的なcomコンポーネントで実行されるかにかかわらず、Webサイトのパフォーマンスとスケーラビリティに大きな影響を与えます。
writehtml関数の次のコードスニペットをご覧ください。データという名前のパラメーターは、表形式構造(たとえば、データベースから返されるデータ)にフォーマットされるデータを含む文字列の単なる配列です。
function writehtml(data)dim nrepfor nrep = 0から99 shtml = shtml&vbcrlf _& "<tr> <td>"&(nrep + 1)& "</td> <td>データ(2、nrep)& "</td> <td>" _&data(2、nrep)& "</td> <td>" _&data(3、nrep)& "</td> <td>" _&data(4、nrep)& "</td> <td>" _& "</td> <td> "</td> </tr>" nextwritehtml = shtmlend関数
これは、HTMLコードを作成する際に多くのASPおよびVisual Basic開発者が使用する一般的な方法です。 SHTML変数に含まれるテキストは、呼び出しコードに返され、respons.writeを使用してクライアントに書き込まれます。もちろん、これはwritehtml関数を含まないページを直接埋め込む類似のコードとして表現することもできます。このコードの問題は、ASPおよびVisual Basicが使用する文字列データ型(BSTRまたはBASIC文字列)が実際に長さを変更できないことです。これは、文字列の長さが変更されるたびに、メモリ内の文字列の元の表現が破損し、新しい文字列データを含む新しい表現が作成されることを意味します。これにより、メモリの割り当てと取り引きメモリの操作が増加します。もちろん、ASPとVisual Basicがあなたのためにこれを解決したので、実際のオーバーヘッドはすぐには表示されません。割り当ておよび未配分メモリには、基本的なランタイムコードが各専用ロックのロックを解除する必要があるため、多くのオーバーヘッドが必要です。この問題は、文字列が大きくなり、大きな弦の連結中に発生するため、メモリの大きな塊が割り当てられ、迅速かつ連続的に扱われる場合に特に明白になります。この問題はシングルユーザー環境にほとんど影響を与えませんが、サーバー環境(たとえば、Webサーバーで実行されているASPアプリケーション)で深刻なパフォーマンスとスケーラビリティの問題を引き起こす可能性があります。