2

問題を再現する手順:

  • ステップ 1:ブラウザ (firefox) のキャッシュ履歴をクリーンアップしたとしましょう。

  • ステップ 2:ブラウザに www.stackoverflow.com と入力して、キャッシュ フォルダに新しいデータを取得します。

  • ステップ 3:ブラウザに「cache:about」と入力します

  • ステップ 4: [ディスク キャッシュ デバイス/リスト キャッシュ エントリ] をクリックします。

  • ステップ 5:キャッシュ フォルダにダウンロードされた「.png」ファイルを検索します。そして、データサイズが実際には 16425 バイトであることに注意してください。

  • ステップ 6:イメージが保存されているコンピューター上のパスをコピーします。

  • ステップ 7:問題のある問題を続行する前に、このリンクをクリックして画像がどのように見えるかをすばやく確認します。

  • ステップ 8:画像の確認

  • ステップ 9:最近コピーしたパス (イメージがシステムに保存されているパス) を開始/実行/貼り付けます。

  • ステップ10:これが画像です!ただし、手動で「.png」と入力する必要があります

  • ステップ 11:どのように見えるか見てみましょう:

  • ステップ 12:ファイルのサイズを変更したい画像を編集し、ブラウザがキャッシュした実際のサイズとは別のサイズにします。なので、画像を小さくして保存します。

  • ステップ 13:ファイルのサイズが実際に変更されていることを確認します。以前は 17kb でしたが、現在は 3kb です。

  • ステップ 14:ファイル名に追加した「.png」テキストを削除して、ブラウザーが読み取れるようにします。

  • ステップ 15:ブラウザでリロードを押しても、ファイルが読み込まれません!

期待される結果: - 簡単に理解できるようにするために、この例では ".png" を使用しましたが、同じ結果は得られません。私の実際の問題で、キャッシュにFLASH .swfファイルを読み取らせようとしているときに、元のデータサイズを積極的に変更しました..何かアイデアはありますか? リンク?サイズが変わっていても、ダウンロードしたファイルをブラウザに再度読み込むように指示する方法について、インターネットで情報を見つけることができません!!

4

2 に答える 2

1

ポイントは、その要素のキャッシュが期限切れになるまで (およびその場合)、サーバーがキャッシュされている場合、クライアントはサーバーを再度チェックしないということです。最後にダウンロードしてから 10 分以上経過した場合にクライアントが再ダウンロードできるように、HTTP ヘッダーの最大経過時間を 10 分に設定します。サイズが変わっただけでは更新できません。クライアントがサーバーをチェックして最近の変更があったかどうかを確認するときに取得される結果に基づいてクライアントキャッシュを更新するJSまたはajaxまたは何かがない限り、それ以外は不可能です。

したがって、それが必要な場合は、サーバー上の既存のデータに基づいて、何かが変更された場合にサーバー上で追跡する必要があります。たとえば、サーバーは初期サイズを追跡します。画像サイズを変更した場合 (または、Web アプリケーションで何かが変更されたと仮定した場合)、サーバーは、これがサーバー上で変更されたことを認識します (サーバー上で常に現在の画像サイズも取得するため)。そのため、Cookie または html5 localStorage を使用して、画像がダウンロードされたときにクライアントで画像サイズを追跡する必要もあります。

したがって、スクリプトのクライアント部分は、ページの読み込み時にサーバーに要求し (Cookie または localStorage に保存されている画像サイズも送信します)、サーバー スクリプトは現在の画像のサイズとクライアントから送信されたサイズを比較します。異なる場合は、クライアント キャッシュを明示的に期限切れにします。つまり、クライアントはイメージを明示的に再ダウンロードする必要があります。それ以外の場合は何もせず、キャッシュされた画像を使用するだけです。

したがって、基本的に、この種の機能が必要な場合は、ログイン cookie と同じように画像を処理する必要があります (サーバーが明示的に追跡し、期限切れにし、新しいものを設定し、期限切れにするなど)。

于 2013-02-10T03:05:12.597 に答える
0

私は同じ問題に直面していましたが、このスレッドのおかげで最終的に回避できました。

これはFirefox専用です。about:config に移動し、変数 "browser.cache.check_doc_frequency" (デフォルト 3) を 2 ( http://kb.mozillazine.org/Browser.cache.check_doc_frequency )に編集します。

キャッシュ ディレクトリ内のファイルを編集します。(新しいサイズが異なっていても問題ありません!) chache_001 のファイル サイズ エントリを変更する必要はありません。

これがお役に立てば幸いです。

編集:swfファイルのファイルサイズを元のサイズよりも小さく保つようにしてください。

理由: よくわかりませんが、オンライン ゲームの swf を編集しようとしたときに、ゲームが新しいキャッシュ ファイルを読み込めなくなりました (Firefox が x メモリ バイトを予約するように、x はサーバーによって指定されました。 . ただし、ファイルが x バイトより大きいため、ファイル全体がロードされず、フラッシュ ムービーはロードされません)。

swf の一部の画像を同じサイズの空白の画像に編集し、再コンパイルして再圧縮して、元の swf よりもファイルサイズを小さくしたところ、うまくいきました。

于 2013-07-11T00:25:58.353 に答える