シンプルなクライアント側のテクニック
一般に、キャッシングは良いことです... Web サイトを開発する際に自分で問題を修正するか、実稼働環境でキャッシュを制御しようとしているかに応じて、いくつかのテクニックがあります。
Web サイトへの一般的な訪問者は、サイトを開発しているときと同じ体験をすることはありません。平均的な訪問者がサイトにアクセスする頻度は低いため (Google または hi5 ネットワークでない限り、月に数回程度)、ファイルがキャッシュに保存される可能性は低く、それで十分な場合があります。
ブラウザーに新しいバージョンを強制的に適用したい場合は、いつでもリクエストにクエリ文字列を追加して、大きな変更を行うときにバージョン番号を上げることができます。
<script src="/myJavascript.js?version=4"></script>
これにより、全員が新しいファイルを取得できるようになります。これが機能するのは、ブラウザがファイルの URL を見て、キャッシュにコピーがあるかどうかを判断するためです。サーバーがクエリ文字列を処理するように設定されていない場合、そのクエリ文字列は無視されますが、名前はブラウザーには新しいファイルのように見えます。
一方、Web サイトを開発している場合は、開発バージョンに変更を保存するたびにバージョン番号を変更したくありません。それは面倒です。
したがって、サイトを開発している間は、クエリ文字列パラメーターを自動的に生成するのが良い方法です。
<!-- Development version: -->
<script>document.write('<script src="/myJavascript.js?dev=' + Math.floor(Math.random() * 100) + '"\><\/script>');</script>
リクエストにクエリ文字列を追加することは、リソースをバージョン管理するための良い方法ですが、単純な Web サイトの場合、これは不要な場合があります。そして覚えておいてください、キャッシングは良いことです。
また、ブラウザがファイルをキャッシュに保持することについて必ずしもケチであるとは限らないことも注目に値します。ブラウザにはこの種のポリシーがあり、通常は HTTP 仕様で定められたルールに従っています。ブラウザがサーバーにリクエストを送信すると、レスポンスの一部にExpiresヘッダーが含まれます。キャッシュに保持する期間をブラウザに伝える日付です。ブラウザが次に同じファイルのリクエストに遭遇したとき、キャッシュにコピーがあることを確認し、有効期限を見て、それを使用するかどうかを決定します。
信じられないかもしれませんが、ブラウザのキャッシュを非常に永続的なものにしているのは、実際にはサーバーです。サーバーの設定を調整してExpiresヘッダーを変更することもできますが、上で書いたちょっとしたテクニックの方がおそらくはるかに簡単です。キャッシングは適切であるため、通常はその日付をかなり先の日付 (「Far-future Expires ヘッダー」) に設定し、上記の手法を使用して変更を強制します。
HTTP やこれらの要求がどのように行われるかについて詳しく知りたい場合は、Steve Souders 著の「High Performance Web Sites」が良い本です。これは、主題への非常に良い紹介です。