我一直在玩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 /并删除其他缓存 新的那一个。
答案 0 :(得分:2)
有关Chrome如何处理本地存储空间的更多信息,请查看此白皮书:https://developers.google.com/chrome/whitepapers/storage
临时存储空间限制为每个应用总池数的20%,总池数限制为可用磁盘空间的50%,因此Chrome无法填充磁盘。当您向本地磁盘添加更多文件时,Chrome将相应地缩减分配给临时存储池的总数。