クラシック ASP - Response.flush をいつ使用するか?
-
02-07-2019 - |
質問
レポートが非常に遅いです。Response.flush を追加しましたが、かなり改善されたようです。この方法を使用する場合の注意点は何ですか。
解決
Response.Buffer が true に設定されていない場合、実行時エラーが発生します。また、ASP ページで Flush メソッドが呼び出された場合、サーバーはそのページのキープアライブ要求を受け入れません。
また、テーブル全体が送信されるまで一部のブラウザーではレンダリングされないため、テーブルベースのデザインを使用しているかどうかにも注意する必要があります。つまり、10,000 行がある場合、ユーザーは実際に表示される前に、10,000 行すべてが転送されるまで待つ必要があります。
他のヒント
拡大する ウェインの答え:何かをするときに Response.Headers を設定する必要がある場合、レスポンスの一部がフラッシュされた後はそれを行うことはできません。
このように応答をフラッシュしても問題はありません。一般に、パフォーマンスを向上させるには、ページ全体をバッファリングしてクライアントにフラッシュすることが推奨されますが、長時間実行されるスクリプトの場合は、ユーザーに何かが起こっていることがわかるように、クライアントにデータを表示する方が良い場合がよくあります。
手動でのフラッシュは、最初からページをバッファリングする場合にのみ適切な効果があることに注意してください。それ以外の場合は、IIS が自動的にフラッシュします (ページをクライアントにストリーミングします)。
IIS はスクリプトを処理する代わりにページを頻繁にフラッシュする際にリソースを使用する必要があるため、フラッシュを頻繁に行うことは避けてください。つまり:行ごとではなく、50 行ごとにフラッシュします。
Response.flush は、レポートのヘッダーをブラウザに送信するのに便利です。次に、「読み込み中メッセージ」を表示し、レポートを処理してレポートをフラッシュし、JavaScript を実行して「読み込み中」メッセージを非表示にします。
こうすることで、何かが起こっていることをユーザーに知らせることができるため、誘惑に負けて「STOP BACK」を押したり、ウィンドウを閉じたりすることがなくなります。
また、どのブラウザがどのテーブルをレンダリングするかをいろいろ試してみましたが、タグを受信しない限りテーブルをレンダリングしないのは IE だけのようです。これは、すべての行が他のブラウザでは徐々に表示される可能性がありますが、IE では表示されないことを意味します。