1

よくファイルをキャッシュすることは古い質問ですが、いくつかのファイルのいくつかの変更を更新したときに最後のバージョンが確実に提供されるようにするためです。たとえば、タイムスタンプのような get 変数をファイル uri に追加できることはよく知られていますが、キャッシュの利点がすべて失われ、ファイルがキャッシュされることはありません。今のところ、いくつかの Web 提案を調べて見つけた最良の方法は次のとおりです。

  • htaccess に有効期限情報を追加します。例: ExpiresByType text/javascript "access plus 7 days"
  • fileName+'-'+lastModifTimestamp(src)+fileExtension のリクエスト、例: 'dir/usualfilename-345678.js'. lastModifTimestamp は PHP filemtime($src) のようなサーバー スクリプトによって設定されます。
  • 次に、htaccess で、「dir/usualfilename-2345678.js」を「dir/usualfilename.js」に書き換える rewriterule を追加します。RewriteRule (.+)-[0-9]+(\.(js|css))$ $1$2 [L]

利点は、使用するファイル名を変更する必要がないことです。ビジター ブラウザーの動作がどれほど賢くても奇妙でも、キャッシュは効果的であり、変更された場合に更新されたファイルを確実に取得します。

次に、私の dojoConfig (dojo 1.7+) には、たとえば、すべてのモジュール パスの末尾に最後の modif タイムスタンプが付けられているようなパッケージがあります (私の dojo 構成は、PHP で動的に記述されています)。私が見つけた唯一の方法は、エイリアス プロパティをいじることです。パッケージのすべてのファイルにエイリアスを設定する必要があります。問題は、それが非常に重いことです。パッケージに 100 個のモジュールがある場合、必要な場合でも 100 個の宣言されたエイリアスが必要になります。たった3つのファイル...あまり「動的」ではありません。cachebust プロパティは近いですが、すべてのファイルに対してであり、上で説明したように問題があります。

私の質問は次のとおりです。

  1. 言及されているように、キャッシュと更新されたファイルを管理するより良い方法を知っていますか
  2. dojoConfig で、一部のパッケージ ファイルにこの操作を適用するスマートな方法はありますか?

情報をありがとう!

4

1 に答える 1

1

私はあなたがしていることを2つの異なる方法で達成しました。正解はないと思います。最良の答えは、環境に適合するものです。

1) 私の現在のギグは、適切にバージョン管理された製品の開発です。そのため、css および javascript アーティファクトを要求するときに、バージョンを URL に追加します。新しいバージョンが展開されると、エンド ユーザーは新しいファイルを取得します。

2) また、厳密なバージョン管理スキームを持たないいくつかの小さな Web サイトも維持しています。それらについては、Web サーバーが開始されたときのタイムスタンプを使用します。新しいコードを展開すると、Web サーバーの再起動が必要になります (これらは高可用性サイトではありません)。サーバーに更新を展開して再起動すると、エンド ユーザーは新しいファイルを取得します。


編集:

Dojo 構成には、使用できる「cacheBust」プロパティーがあります。

data-dojo-config="parseOnLoad: true, cacheBust: ???, packages: []"

どこ ???前述したように、バージョン、サーバーのタイムスタンプです。

于 2012-09-27T11:47:32.310 に答える