0

私は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 /を参照して、新しいキャッシュから他のキャッシュを削除するように通知することです。

4

1 に答える 1

2

Chromeがローカルストレージをどのように処理するかについて詳しくは、このホワイトペーパーをご覧ください:https ://developers.google.com/chrome/whitepapers/storage

一時ストレージはアプリあたりの合計プールの20%に制限され、合計プールは使用可能なディスク容量の50%に制限されるため、Chromeはディスクをいっぱいにすることはできません。ローカルディスクにファイルを追加すると、Chromeはそれに応じて一時ストレージプールに割り当てられた合計を縮小します。

于 2012-07-16T13:28:01.547 に答える