2009-09-09 14 views
10

。ボタン{ 背景:url(../ Images/button.png); }ブラウザにキャッシュされたイメージを再読み込みさせます。

問題:パフォーマンス上の理由から、すべての静的コンテンツには有効期限ヘッダーがあり、ブラウザによってキャッシュされます。画像が変更されると、ユーザーはキャッシュをリフレッシュする必要があります(IEではCtrl + F5)。画像をキャッシュしたいが、必要なときには自動的に画像を再読み込みする必要がある。

質問:は次に有効ですか? V = 1234私のサイトのバージョンである

.button { 
    background: url(../Images/button.png?v=1234); 
} 

。私はそれがCSSでこのようなことを書くのが100%有効かどうか分からず、バージョンが同じであればブラウザは画像をキャッシュしておきたい。現代のブラウザーはすべて、URLパラメーターのデータを正しくキャッシュしますか?

ありがとうございました。

+0

私はすべてのブラウザで動作するとは限りません。いくつかのクエリ文字列を無視します。おそらく、画像の名前にバージョンを追加することができます。これを行うのに役立つフレームワークがあるので、button_v1.png、button_v2.pngなどは必要ありません。 –

+0

私のサイトにとって良いニュースです。IE6では100%正しく動作する必要はありません。 「?1234」がIE7-8、Firefox 3+、最新のChrome、Opera、Safariで有効なソリューションであれば、このソリューションは私にも当てはまります。 – Roman

答えて

8

最近のブラウザでは、ブラウザで画像のアドレス(?v=1234を含む)を見て、キャッシュされていないことを確認して新鮮なものを送信します要求。

+3

ダウン投票の理由は何ですか? – rahul

+0

それは完全には真ではありません.. IEは、実際にはハッシュされたリンクとキャッシュ制御ヘッダーを無視することができる最も厄介なものです。それは "最良の"アプローチだと考えました.. – yoda

+1

これは、元の質問 "私はそれがすべてのブラウザで動作しないと信じています。十分なブラウザがそれをサポートしていれば有効なアプローチです。 –

0

これは、High Performance Web Sitesのルール3:「期限切れまたはキャッシュ制御ヘッダーの追加」で説明しています。推奨されるアプローチの1つは、サイトではなくファイルのバージョンを変更することです。 accompanying blogから

あなたは遠い将来を使用する場合はいつでもコンポーネントの変更、コンポーネントのファイル名を変更する必要がExpiresヘッダを、覚えておいてください。 Yahoo!この手順をビルドプロセスの一部にすることがよくあります。バージョン番号は、コンポーネントのファイル名に埋め込まれています(例:yahoo_2.0.6.js)。

+0

JavaScriptやCSSファイルでこのようなファイル名の命名(例:yahoo_2.0.6.js)を行っていますが、変更されたすべての画像の名前を変更するのはずっと難しいです私は、画像ファイル名を変更する必要のないアプローチをしたいのですが、「1234」アプローチの別の欠点があります。新しいバージョンのサイトはすべての画像を無効にしますが、変更しなくても、少なくともこれはメンテナンスに苦労しません。 – Roman

関連する問題