1

単純なjQueryDIV更新コードを使用しています。

var refreshId = setInterval(function(){$('#refreshdash')。load('dashboard.php?cache =');}、4000);

右?更新するファイルの末尾に「?cache =」を追加すると、ファイルなどがキャッシュされるとのことで、帯域幅の削減などに役立つとの連絡がありました。

私は彼を今まで信じていませんでした。これは本当ですか?...そうでない場合、それは実際に何をしますか、何もしませんか?

4

5 に答える 5

5

いいえ、それは実際に起こっていることの正反対です。

ブラウザは、URLに基​​づいてコンテンツをキャッシュします。URLの末尾にクエリパラメータを追加することで、URLを取得する場所を効果的に変更できるため、コンテンツが変更された場合にブラウザはコンテンツを再要求する必要があります。このため、最後にパラメータを追加することは、キャッシュブレイクcache=xと呼ばれる手法です。

例えば:

http://example.com/index?timestamp=100
http://example.com/index?timestamp=567

これらのURLは両方とも同じコンテンツを返す可能性がありますが、それらは異なるURLであるため、別々にキャッシュされます。

一般的なキャッシュ破壊手法は、現在のタイムスタンプをURLに追加することです。これは常に変更されるため、毎回新しいURLが生成されるようにします。

ただし、ブラウザは毎回コンテンツを再フェッチする必要があるため、これにより帯域幅が減少するのではなく、増加します。

この方法の最適な使用法は、ほとんど変更されない静的ファイルですが、プロキシサーバーまたは他のHTTPキャッシュによって長期間キャッシュされる可能性がある場合です。私はこれを.js.cssファイルに使用します。ファイルの最終変更時刻をURLに追加します...ファイルが更新されるたびに、URLが変更され、ブラウザーはそれらを再フェッチすることを認識します。

于 2009-09-06T19:38:29.373 に答える
1

URLの最後にランダムな文字列(?cache =など)を含むクエリ文字列を配置すると、キャッシュができなくなります。そのURLに対して行われたすべてのリクエストに対して、サーバーへの新しいラウンドトリップを強制します。

詳細については、こちらをご覧ください

于 2009-09-06T19:36:00.250 に答える
1

はい、ブラウザが結果をキャッシュしないようにする場合は、ランダム変数(現在のタイムスタンプ+ハッシュなど)を渡すと便利です。ただし、「?cache = your_random_variable」のように使用する必要があります(例:?cache = abc9623498385023)。

于 2009-09-06T19:36:20.407 に答える
1

phpがヘッダーを送信してページがキャッシュされないようにするため、デフォルトでは動的ページはキャッシュされません。適切なヘッダーを送信してページをキャッシュすることができますが、デフォルトではキャッシュされません。

これは、Firebugのネットパネルを使用してテストできます。キャッシュから何かがロードされたかどうかがわかります。

于 2009-09-06T19:37:48.563 に答える
1

通常、この手法はほとんど静的なコンテンツで使用されます。

長時間キャッシュするようにブラウザに指示するスクリプトリターンヘッダーがあります。これにより、ブラウザは新しいコピーを要求する代わりに、キャッシュされたコピーを使用するため、帯域幅が低下します。javascriptライブラリ、ロゴ、CSSファイルなどに最適です。

欠点は、あなたが物事を変更するとき、それらがキャッシュされているので、人々はそれらを見ることができないということです。これは、CSSファイルまたは別のjavascriptファイルの新しいバージョンに依存する新しいjavascriptウィジェットライブラリなどの相互依存関係がある場合、さらに悪化する可能性があります。1つだけが読み込まれると、ページが正しく表示/機能しない場合があります。

これに対する1つの半解決策は、有効期限をバランスの取れた時間、たとえば1日に設定して、全員が最終的に新しいコンテンツを要求するようにすることです(少なくとも、1日に1回コンテンツを取得するため、帯域幅がわずかに増加します)。ただし、これは依存関係の問題を解決しません。

ランダムパラメータ(?cache =)を使用することは、この問題の優れた解決策です。基本的に、サーバーはパラメーターを無視しますが、ブラウザーの場合、パラメーターが異なるとURLも異なります。メインサイトはコンテンツがいつ変更されるかを知ることができるため、パラメーター値を変更して、ブラウザーが変更された瞬間にブラウザーを強制的に更新します(コードに問題がない場合、古いキャッシュや依存関係の問題が発生する可能性はありません)。

パラメータ名は重要ではなく、その値も重要ではありません。ただし、サーバーによって解釈されるものは避けたいのは明らかです。このメカニズムの人気のある選択肢:

  • ファイルのmd5(計算にコストがかかる可能性があるため、このサーバー側もキャッシュします)
  • ファイルの日付/時刻、または日付/時刻のハッシュ
  • ファイルまたはサイト全体のバージョン番号(新しいコンテンツをデプロイするたびにバージョンをインクリメントする場合)

彼らがstackoverflowでキャッシュを行う方法についてのブログ投稿があります。


私が見たもう1つのシナリオは、コンテンツをキャッシュする原因となるヘッダーをデフォルトで送信するサーバーにデプロイすることです。たとえば、一部のホスティングプロバイダーはこれを行っていました(おそらくまだそうですが、個人的には問題を確認していません。十年)。?cache =を設定することで、これを回避できます。ただし、ここでの実際の解決策は、使用に意味がない場合にサーバーをデフォルトでキャッシュしないようにすることです。

于 2010-03-11T16:18:53.897 に答える