0

我一直在玩 HTML5 离线应用程序缓存,运行边界测试以研究边缘情况下的浏览器行为,特别是找出缓存配额。

所以我所做的是生成并提供离线应用清单,并将 300 个 5MB JPEG 文件添加到缓存中。

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/,我震惊地发现对于一个 Web 应用程序,有 2.3GB 的巨大缓存!

发现我访问的网站在后台下载了如此多的数据,这真的很奇怪,作为一个用户,它会变得非常令人不安。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 回答