2013-01-16 13 views
6

私はhostgator上でアプリケーションを実行しています。 jsファイルを変更すると、ユーザーはキャッシュをクリアするまで変更内容を確認できません。これはアプリケーションに変更を加える唯一のオプションですか?基本的には、変更を加えてファイルを更新し、すべてのユーザーにキャッシュをクリアするように要求していますか?次回ログイン時にクライアントのキャッシュをクリアする方法

答えて

10

ファイルにバージョン管理を含める必要があります。インクルードするファイルのURIを変更するたびに、ブラウザはキャッシュの一致を検出せず、インクルードを再ダウンロードします。例えば

:232あなたは新しいコードをリリースするたびに変更する必要があり、あなたの修正バージョン番号です

<script type="text/javascript" src="include/232/init.js"></script> 

代わりに、クエリ文字列を使用することができます。

<script type="text/javascript" src="include/init.js?232"></script> 

ポイントは、あなたがあなたの訪問者が再ダウンロードファイルにいつでも、いくつかの方法でURIを含めるファイルを変更する必要があることです。

あなたはPHPや他のサーバサイド言語を使用している場合は、あなたのファイルが変更されている含まれてたびにセットアップこのバージョン管理が自動的に発生することができます。これを回避するためにhttp://derek.io/blog/2009/auto-versioning-javascript-and-css-files/

3

あなたは資産URLにダミーのクエリ文字列を追加することができます

<link href="http://mysite.com/main.css?v=1" rel="stylesheet" /> 

を次に、あなたはCSSに変更を加えるたび、ちょうどバージョン番号をつり上げます。

このテクニックは、キャッシュ無効化と呼ばれています。 Search Google for thatであり、さまざまなバリエーションがあります。

2

1つのトリックは、いくつかの種類でクエリ文字列を追加することですあなたのlink Javascriptコールにバージョンまたはタイムスタンプの例:

<script src="myexternal.js?20130116" type="text/javascript"></script> 

この例は単純ですが、その点を証明しています。基本的には、フルパスを認識できない場合、ファイルをロードするようにブラウザに指示します。いつでもあなたのjavascriptファイルを変更し、最新のバージョンをピックアップしたい場合は、そのタイムスタンプまたは値を疑問符(クエリ文字列)の後に更新するだけです。

2

あなたは、クライアントのブラウザのキャッシュをクリアすることはできませんが、あなたがそのようなファイルに

<link rel="stylesheet" href="/css/example.css?v1.0" type="text/css" /> 

そして、あなたが変更

<link rel="stylesheet" href="/css/example.css?v1.1" type="text/css" /> 

を作るバージョン管理を追加するなど、キャッシュの無効化技術を使用することができますそれはタイムスタンプであっても、何でも、異なっている必要があります。

1

JavaScript/CSSファイルのパスにいくつかのダミーパラメータを追加することが時々あります。ブラウザは基本的に別のURLを表示し、キャッシュされたバージョンは使用しません。

$jsFile = '/js/myFile.js';    // probably cached 
$jsFile = '/js/myFile.js?r='.time();  // won't ever be cached 

あなたは本当にクライアントのキャッシュをクリアすることはできませんが、これは、それがこのファイルを見て初めてであることを考えにクライアントブラウザをだますことができますし、それは再びそれをダウンロードします。

安定版になったらこれを無効にすることを忘れないでください。ファイルをキャッシュすることは、アプリケーションの読み込み時間を短縮するのに最適です。

1

私がこの問題を回避するために使用するトリックは、更新されたスクリプトのURLを変更することです。これにより、リソースの名前が異なるため、クライアントはスクリプトを再度ダウンロードしなければなりません。

最も簡単な方法:URLの末尾にあるバージョン番号js/my-script.js?v=1.0を使用してください。

すべてのナビゲータで100%サポートされています。ファイル名自体を変更してくださいjs/my-script.v1.0.js

+0

最初は100%サポートされていないのはなぜですか? – Ian

+0

静的リソースにクエリ文字列を追加すると、いくつかのプロキシでのキャッシュが防止されているようです(http://www.mikebrittain.com/blog/2009/06/11/caching-urls-with-query-strings/)。キャッシュされたファイルのバージョンをある時点でクリアできるようにしたいが、キャッシング機構を完全に妨げないようにしたい。しかし、あなたがパフォーマンスの専門家でない場合、最初の解決策は素晴らしいです。それはWordpressのテーマに使用されるものです。 –

+0

うーん、非常に興味深い、リンクを提供していただきありがとうございます。私はイカがブラウザで使用されているとは思わないが(あなたが指摘したようにプロキシだけ)それで、すべての場所でキャッシュを「トリック」することができればいいのですが、あなたが望む正確な時刻に、重要なことはブラウザを騙すことです。クエリ文字列を使用することは問題ではありません。ファイル名に「バージョン」を埋め込み、書き換えルールを使用することはかなりスマートですが、私は自分自身のもののいくつかについてそれを調べるつもりです。 – Ian

関連する問題