2009-08-04 7 views
0

ウェブサイトの新しいCSSファイルをアップロードすると、ページを表示しているクライアントがコンピュータにキャッシュされたバージョンを持つ可能性があります。彼らは彼らのキャッシュをクリアするまで、またはCtrl + F5を押すまで、CSSの更新(またはイメージのような他の静的な資産)を見ることができません。これは明らかに理想的な解決策ではありません。ASP.Net - キャッシュされたCSSを使用しているコンピュータでウェブサイトが不正になるのを防ぐ

これに対処する1つの方法は、私がウェブサイトの新しいビルドをアップロードするたびにCSSファイルの名前を変更することです。 Visual Studioで自動的にこれを行う方法はありますか?私はバージョン管理のためにAnkhSVNを使用しています。そのため、選択したファイルに対してこれを自動的に実行するスクリプトを入手できれば、それも機能します。

私は正確にGoogleとは何かを知りませんでした。誰かが正しい方向に向けることができ、ベストプラクティスを提案できますか?

編集:ああ、言及を忘れてしまった - 私は静的資産の有効期限タグと組み合わせてこれを行う必要があります。私はまだ研究の早い段階なので、この関係がどのように結びついているのか分かりません。

ありがとう!

答えて

8

あなたのcssファイルのURLにクエリ文字列を追加するだけです。したがって、file.cssを参照する代わりに、file.css?a = 1を参照してください。次回にcssファイルを変更すると、クエリを変更するだけでファイルが再ダウンロードされます。

+2

このテクニックの実際の例は、このサイトのソースコードにあります。 – ironsam

+0

興味深い - クエリ文字列の値が同じ場合、ブラウザは最新のバージョンを持っていることを知っています...私が探していた解決策かもしれません! –

+1

また、CSSが頻繁に変更されたり、サイトが開発中の場合は、ページが表示されるたびにクエリ文字列がランダムな値に変更されるように設定することができます。これは、ページが表示されるたびに、ブラウザにCSSファイルをダウンロードさせることになります。 –

0

this blog entry上の機能を使用してCSSとJavaScriptのキャッシングを防ぐための優れたソリューションがあります。

クエリ文字列でSVNリビジョン番号を使用しますが、乱数または日付/時刻文字列を使用するように簡単に変更できます。

1

私はいつもcssを呼び出すときにバージョン番号を使用します。たとえば、

<html> 
    <title> 
    <script src="myScript.js?v=1.1"/> 
    <link rel="stylesheet" href="myStyle.css?v=1.1" /> 
    </title> 
    <body> 
    </body> 
</html> 

この番号を増やすと、スタイルシート/ javascriptの新しいバージョンを取得するようブラウザに指示します。これは、AJAXリクエストを使用するときにも便利ですが、ブラウザによってはキャッシュする傾向もあります。

このテクニックを適用して、コードの周りにコードを作成して番号を自動インクリメントすることができます。たとえば、ユーザーセッションの開始時に生成された番号(またはdatetime)を使用できます。ユーザーが後で戻ってくると、新しいセッション、つまり新しい番号が取得されます。

アセンブリからビルド番号を使用することもできます(アセンブリにビルド番号を自動的にインクリメントするように.NETに指示することもできます)。また、手動で更新するweb.configにビルド番号を保持することもできます。

しかし、ブラウザが常に期限切れヘッダーに従うとは限らず、(新しい)クエリ文字列を使用するとブラウザに新しいバージョンが適用されるため、キーは実際にスクリプト/ CSSリファレンスの背後にあるクエリ文字列を使用することです。

関連する問題