2016-03-19 8 views
1

Gitは私のサイトをもっと簡単かつ迅速に更新しました。大好きです。 しかし、gitでファイルを更新すると、私のブラウザは古いキャッシュ可能なファイルにはるかに長くかかっているようです。 これはちょうど私のブラウザであるかどうか、それがgitの奇妙なものであるかどうか、あるいはそれが他の何らかの理由で私にしか影響を与えない問題であるかどうかはわかりません。git pushでサイトを更新しても、ブラウザは古いキャッシュバージョンをまだロードしています

私は数日前に自分のサイトにバグを発見したので、修正して、影響を受けたjsファイルの新しいバージョンを私のサイトに送りました。これを行うと、私がf5をヒットしなければ、古いjsファイルがロードされます。だから、私はいつもf5を押して、何も考えません。 しかし、私のサイトのユーザーにとって、彼らはおそらく同じ経験をしているでしょう...それは良くありません。

私は2日前にjsファイルを更新し、ホームページを更新して、動作していることを確認してから放置しました。 ちょうど今、私はサイト上の別のページをチェックし、まったく同じjsファイルをロードしていましたが、それはまだ古いキャッシュバージョンを使用していました。私はf5を押すと、新しいものがロードされます。 すべてのブラウザにキャッシュされた古いファイルを忘れるような方法はありますか?私はキャッシュの寿命が短くなった後に自動的に起こるはずだと考えました。ここで

はクロムからヘッダです: enter image description here

あなたが見ることができるように、キャッシュ制御のmax-年齢は愚か高いです。私のサーバはnginx + apacheと、Vesta Control Panel(VestaCP)と呼ばれるバックエンドシステムで動作します。 キャッシュコントロールをバックエンドで修正した場合、どのようにして私のユーザーのすべてのブラウザに一見忘れられないキャッシュバージョンを忘れてしまったのかを教えてください。

答えて

0

これは設定によって異なります。インデックスページがHTMLの場合は、HTMLファイルでサーバーキャッシュの期限が非常に短くなるように設定すると、インデックスページが頻繁にリロードされます。 (これは毎回リロードする必要があるため、index.phpでは問題ありません)。それからあなたはあなたのリソースファイルを書き換えたいでしょう。例えば

、あなたはとてもscript.jsscript.1a34be4sde4.jsになり、その後、次の更新がそうでscript.3ezseasd4sad.jsとなり、イサキ、がぶ飲み、またはすべてのリソースのファイル名の最後に一意の文字列を追加します同様のものを使用することができます。または、手動で名前を変更して、毎回1​​つずつ追加することができます(script-001.jsscript-002.jsなど - 多くのファイルではこれは苦しいでしょう)。

このようにして、最大年齢を愚かに高く保つことができ、ユーザーはそのファイルのバージョンを再度ダウンロードする必要はありません。しかし、あなたのインデックスページが更新されたバージョン(新しいファイル名)にそれらを指し示すとき、彼らは新しいバージョンをつかみ、それを愚かに長くキャッシュします。

問題はgit pushを使用してサイトを更新することで発生します。レポをきれいに保つために、あなたができることがいくつかあります。私がたぶん傾いているのは、プッシュされたブランチをステージングフォルダにチェックアウトし、ビルドスクリプトを実行し、最終バージョンをデプロイメントフォルダに移動する、サーバー上のポスト受信フックスクリプトです。

0

あなたが使用できるキャッシュ無効化技術がいくつかありますが、特にgitにリンクされていないものもあります(いくつかは気になるかもしれません)。あなたのindex.htmlで

、クエリのキャッシュ対策を使用することができます

<script src="/js/core.js?cache=12345"> 

いくつかのケースで働く(クエリ文字列が異なる場合、ほとんどのブラウザでは、私の知る限り、再使用がファイルをキャッシュされません) 。つまり、インデックスを変更する必要があります。あなたが更新するたびにhtml。キャッシュ・バスト処理を行うには他にもたくさんの方法がありますが、googleを使用すると、少なくとも「ベスト」なダースを見つけることができます。

個人的には、gulp-revgulp-injectを組み合わせて使用​​しています。 gulp-revはファイル名に対してハッシュベースのuniqidを作成し(core.jsの名前をcore-ad234af.jsに変更)、gulp-injectはindex.htmlを変更してcore.jsの代わりにそのファイルをプルするようにします私はプロダクションビルドを行うときにのみこれを行います(devでキャッシュコントロールを0に設定しているためです)。

しかし、これは私がgit pushを使わないので動作します - 私はgitを使ってプロダクションサーバにソースを取得し、プロダクションフラグが設定されたサーバ上にビルドします。

関連する問題