我一直在玩 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/ 并删除新缓存上的其他缓存。