3

多くの人 (1 万人以上) が、定期的にクライアントのサイトに戻ってきて、私たちが構築、改善、ホストしている Web アプリを使用しています。アプリの改善と進化に伴い、Web アプリの JavaScript に対して下位互換性のない更新をかなり頻繁に行ってきました。デプロイ中、javascript は縮小されて 1 つのファイルに連結され、require.js によってブラウザにロードされ、Amazon S3 にアップロードされてホストされます。ファイル名と URL は現在、更新中にまったく変更されません。先週、私たちは Web アプリに主要なリファクタリングを展開し、一部の人々、特に Firefox でアプリが機能しなくなったという報告をいくつか (多くはありませんが) 受け取りました。キャッシングの問題のようでした。テストでは、最初はいくつかのブラウザーで確認できましたが、1、2 回更新すると消えたように見えました。

S3 に (同じ名前の) JavaScript ファイルの新しいバージョンをデプロイするブラウザ キャッシュの影響がどのような影響を与えるのか、また、この状況がキャッシュの無効化や S3 のヘッダーなどの操作を正当化するものなのかどうか、本当にわからないことに気づきました。誰かがこれを処理するのを手伝ってくれますか? ブラウザーが新しいバージョンの JavaScript ファイルをすぐに取得できるようにするために、展開中に実行する必要があるアクションはありますか? そうでない場合、javascript とサーバー API が同期されずに失敗するリスクがあり、ここで発生したと思います。

問題があるかどうかはわかりませんが、サイトのサーバーは Django を実行し、アプリと DB は Heroku にデプロイされています。静的ファイルは、Django の collectstatic コマンドを介して S3Boto を使用して S3 にデプロイされます。

4

1 に答える 1

3

これは、S3 の動作と、S3 でファイルを要求するときに送信されるヘッダーに大きく依存します。経験したように、ブラウザーは異なるキャッシュ動作を示します。そのため、最適なオプションは一意のファイル名を使用することです。

キャッシュバスター ハッシュを使用することをお勧めします。これにより、新しいファイルが常にブラウザーによって要求され、独自のサーバーでファイルをホストする場合に長いキャッシュ ライフタイム ヘッダーを使用できるようになります。たとえば、縮小されたファイルの MD5 ハッシュを作成し、それを追加できます (のようにmycss-322242fadcd23.css)。または、ソース管理システムのリビジョン番号を使用できます。このファイルへのすべてのリンクでキャッシュバスターを使用する必要がありますが、通常、静的リソースを埋め込むテンプレートでこれを簡単に行うことができます。アプリケーションによっては、おそらくこの作業を行うこの Django プラグインを使用できます。

于 2012-09-18T18:37:30.953 に答える