0

ImageResizer+プラグインを使用しDiskcacheていますが、キャッシュを適切に機能させるための問題を見つけています。画像は(新しい画像をアップロードした回数に関係なく)永久にキャッシュされるか、一部の設定を変更すると、一部のブラウザー/コンピューターでは古い画像が取得され、他のブラウザー/コンピューターでは新しい画像が取得されます。

これは、web.config にあるものです。

<add name="AzureReader2" connectionString="blahblahblah" endpoint="http://blahblahblah.blob.core.windows.net/" prefix="~/" redirectToBlobIfUnmodified="false" requireImageExtension="false" checkForModifiedFiles="true" cacheMetadata="true"/>

と:

    <diskcache dir="~/imagecache" autoclean="true" hashModifiedDate="true" subfolders="8192" asyncWrites="true" asyncBufferSize="10485760" cacheAccessTimeout="15000" logging="true" />

既存のパラメーターを使用して達成できるかどうかはわかりません。私の目標は、画像を提供するクエリ文字列を変更して新しい画像を取得することなく、新しい画像がアップロードされたときにキャッシュを無効にすることです。

私が考えていた:

  • おそらく、代替画像がアップロードされたときに、その画像のキャッシュを削除する Webhook を起動する Blob Storage トリガーを持っているでしょうか?
  • または、キャッシュに新しい画像をプリロードして、古いキャッシュされた画像を置き換えるための imageresizer アプリへの Web 要求???

IVirtualFileWithModifiedDate の使用に関するいくつかの投稿を見てきましたが、パフォーマンスに大きな影響を与えると私が理解していることから? ほとんどの画像はほとんど変更されていないため、誰かが画像をアップロードしてすぐに表示されることを期待している画像リクエストのおそらく 5% ですが、新しい画像が表示されてから 1 日経っても表示されない場合は本当にイライラします。アップロードしました!

IVirtualFileWithModifiedDateすべての画像リクエストではなく、画像が変更されたときにキャッシュを無効にするために使用できるとしたら? それは可能でしょうか?

4

1 に答える 1

1

一部のブラウザー/コンピューターでは古いイメージを取得し、他のブラウザー/コンピューターでは新しいイメージを取得します。

異なるブラウザが異なるバージョンを表示しているということは、ブラウザのキャッシングまたはプロキシ/CDN キャッシングのいずれかに問題があることを示しています。

ImageResizer の DiskCache は変更日をハッシュするため、常にストレージ プロバイダーと同じくらい正確です。

サーバー側の無効化に関するあなたの期待について:

を使用しています。checkForModifiedFiles="true" cacheMetadata="true"つまり、Azure最新の変更日を照会されますが、そのメタデータは 1 時間のスライド有効期限ウィンドウでキャッシュされます。つまり、URL が 1 時間アクセスされていない場合、次のリクエストで変更日がチェックされます。StandardMetadataCacheを参照してください。

IMetadataCacheを自分で実装し、そのキャッシュを使用しているストレージ プロバイダーの .MetadataCache メンバーに割り当てることで、この動作を変更できます。

于 2016-10-25T18:06:50.743 に答える