1

これは Web 開発の中心的なトピックであり、検索するのが難しいトピックです。

私は中規模のウェブサイトを運営しており、1 日あたり 2500 人のユーザーが利用しています。私たちは毎月新しい機能を開発しています。master、dev/master、およびその他の開発ブランチを使用して GIT をセットアップしました。ステージング サーバーと dev サーバーがあり、dev にプッシュするまではすべてローカルで作業します。

ただし、変更を dev または live にプッシュする場合、ユーザーがキャッシュを更新する必要があるか、エラーが表示されることがよくあります。

HTML5 アプリケーション キャッシュを使用します。マニフェストを変更すると、すべてのファイルがリセットされます。ただし、アプリケーション全体に App Cache を使用しているわけではなく、アプリケーションを大幅に高速化する一部のリソースのみを使用しています。

アプリ キャッシュはさておき、アプリ キャッシュがなくても、これは以前のサイトでも依然として問題でした。JS および CSS ファイルの後に ?timestamp を実行できることは知っています。しかし、ユーザーにこれらをキャッシュしてもらいたいです。それは彼らの経験をスピードアップします。

では、スピードを上げるためにユーザーにコンテンツをキャッシュさせながら、更新をプッシュしたときに最新のコンテンツを取得するにはどうすればよいでしょうか? 巨人はこれをどのように処理しますか?

ありがとう!

4

3 に答える 3

1

私が読んだことから、クエリ文字列を追加すると、ブラウザはファイルを異なる方法でキャッシュします。したがって、私が使用する解決策は、URL を次のようにすることです。

<script type="text/javascript" src="/resources/cacheholder1/js/site.js" />

プロジェクトをビルドして新しいバージョンをデプロイするたびに、この番号を増やします。もちろん、これらの行が数十または数百ある場合、これは非常に面倒です。そこで、プロジェクトを調べて次のパターンに一致するものを探す bash スクリプトを作成しました。

/resources/cacheholder(#)/

次に、一致した番号を取得してインクリメントし、ファイルを更新/保存します。

もちろん、実際にプロジェクト番号を追跡していて、自動的に変更される限り、任意の番号ではなくプロジェクト番号を使用する方がおそらく賢明でしょう。これは現在私たちにとってうまくいっているので、私はそれに固執していますが、プロジェクト番号を使用することを計画しています.

これは、単なるクエリ文字列の変更ではなく、「新しい」URL であるため、ファイルを適切にキャッシュするはずです。同時に、この URL スキームを許可するために少し余分な構成が必要でした。これは、「キャッシュホルダー」の部分 (番号) が変更されるため、プロジェクトで URL マッピングをハードコーディングできないためです。

クエリ文字列の問題は、ブラウザがクエリ文字列を使用してリクエストをキャッシュすることを想定していないため、実行する場合としない場合が混在していることです。そして、そうするのはIEだけだと思います(私はそれが起こったことを覚えているからです)。他のブラウザは、クエリ文字列でリクエストをキャッシュしないという仕様に従っているようです。

于 2013-03-28T14:07:30.970 に答える
0

のクエリ文字列asset?timestampにより、Firefox はすべてのリクエストについてサーバーに問い合わせます。304 で応答できたとしても、これはリソースとユーザーの時間の無駄です。

www.example.com/assets/<git hash>/name.jsは自分のプロジェクトで使用していますが、正常に動作します。リビジョンは、コンテンツが編集された場合にのみ変更されるため、不要なクエリはありません。

静的コンテンツは 1 か月で期限切れになるように設定されています。

最終更新日: 2013 年 3 月 28 日 (木) 12:16:21 GMT
キャッシュ コントロール: パブリック、最大年齢 = 2678400
有効期限: 2013 年 4 月 28 日 (日) 14:00:58 GMT
ETag: "フラスコ-1364472981.38-9149-1640239173"

<git hash>展開プロセスでは、レイアウト ファイルの を置き換える必要があります。

アセットが最後に変更されたときのリビジョンを取得します。

git log --format=%h -1 -- path/to/asset.js
于 2013-03-28T14:06:13.627 に答える