私はHTML5オフラインアプリケーションキャッシュをいじって、境界テストを実行して、エッジケースでのブラウザーの動作を調査しました。具体的には、キャッシュクォータについて調べました。
だから私がしたことは、オフラインアプリマニフェストを生成して提供し、300個の5MBJPEGファイルをキャッシュに追加することです。
public ActionResult Manifest()
{
var cacheResources = new List<string>();
var n = 300;
for (var i = 0; i < n; i++)
cacheResources.Add("Content/" + Url.Content("collage.jpeg?" + i));
var manifestResult = new ManifestResult("1")
{
NetworkResources = new string[] { "*" },
CacheResources = cacheResources
};
return manifestResult;
}
最初に、1000個のJPEGファイルをキャッシュに追加しましたが、Chromeはエラーをスローしました。クォータを超えたため、新しいキャッシュをストレージにコミットできませんでした。
アップロードする画像の数をゆっくりと減らすことで、適切な数を得ることができました。クラッシュすることなく、300個のJPEGファイルをキャッシュに追加できました。
chrome:// appcache-internals /を調べてみると、1つのWebアプリケーションに2.3GBの巨大なキャッシュがあることにショックを受けました。
私がアクセスしたWebサイトがバックグラウンドで大量のデータをダウンロードしていることに気付くのは本当に奇妙であり、ユーザーとしては非常に不安になる可能性があります。現時点で選択されているChrome(17.0.963.83)のデスクトップブラウザは、サイトが私のローカルストレージに大量のデータをダウンロードしてキャッシュすることを望んでいることを警告したり、許可を求めたりしませんでした。それはかなりとんでもないです。
ブラウザ全体のクォータを超えるという前述の動作のため、サイトはアプリケーションキャッシュへのデータのコミットを停止します。
ブラウザがこれらすべてをより整理された方法で追跡する方法はありますか?現在、「最初に閲覧され、最初に予約された」は非常に迷惑です。このケースを解決するための私の経験は、applicationCache APIを使用してクォータエラーをリッスンし、ユーザーにchrome:// appcache-internals /を参照して、新しいキャッシュから他のキャッシュを削除するように通知することです。