私の仕事のアーキテクトは最近、JavaScript、CSS、画像などのページで使用されるリソースに遠い将来のExpiresヘッダーを使用するように指示されているYahoo!の優れたパフォーマンスのベストプラクティスガイドを読みました。アイデアは、これらのリソースのExpiresヘッダーを数年先に設定して、常にブラウザーによってキャッシュされるようにすることです。ファイルを変更するため、キャッシュを使用する代わりにブラウザーがリソースを再度要求する必要がある場合は、ファイル名を変更してください。バージョン番号を追加します。
これをビルドプロセスに組み込む代わりに、彼は別のアイデアを持っています。ビルドごとにソースとサーバーディスクのファイル名を変更する代わりに(当然のことながら、面倒です)、偽造します。彼の計画は、上記のリソースに遠い将来の有効期限を設定してから、2つのHttpModuleを実装することです。
1つのモジュールが、ASPXページとHTMLページのすべての応答ストリームをインターセプトしてから送信し、リソースリンクを探して、ファイルの最終変更日であるバージョンパラメーターを追加します。他のHttpModuleは、リソースに対するすべての要求を処理し、アドレスのバージョン部分を単に無視します。これにより、ブラウザは、ディスク上のファイルの名前を実際に変更しなくても、ディスク上で変更されるたびに常に新しいリソースファイルを要求します。
わかる?
私の懸念は、ASPX/HTMLページの応答ストリームを書き換えるモジュールに関連しています。<script>
彼は、タグの「src」属性と<img>
タグの「href」属性に一連のRegex.Replace()を適用するだけ<link>
です。これは、コンテンツタイプが「text/html」であるサーバー上のすべてのリクエストに対して発生します。潜在的には1分あたり数百または数千。
HttpModulesがIISパイプラインにフックされていることは理解していますが、これにより、IISがHTTP応答を送信するのにかかる時間に法外な遅延が追加される必要があります。いいえ?どう思いますか?