2012-07-13 14 views
0

我一直在玩弄HTML5离线应用程序缓存, 运行边界测试以研究边缘情况下的浏览器行为,特别是要了解缓存配额。HTML5网页应用绕过所有MAJOR浏览器(Safari/Firefox/Opera/Chrome/IE)中本地缓存的浏览器权限?

因此,我所做的是生成并提供脱机应用清单,并将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文件添加到缓存的数量来得到正确的数量没有崩溃它

调查铬://应用程序缓存,内部/,我是震惊地看到,对于 单一的Web应用程序,有一个2.3GB的巨大缓存!

这真的很奇怪,发现我访问的网站正在下载 这么多的数据在后台,作为一个用户,它可以得到相当 令人不安。 Chrome浏览器(17.0.963.83),当时选择的桌面浏览器 没有警告我或要求我的许可,该网站想要下载并缓存我的本地存储中的大量数据!这是非常无耻的。

由于前面提到的超过浏览器范围 配额的行为,站点会停止将数据提交到应用程序缓存。

浏览器是否有一种方式来跟踪更有组织的 方式中的所有这些?目前,“第一次浏览,第一次保留”是相当烦人的。我的经验 解决这种情况是使用applicationCache API到 监听配额错误,并通知用户浏览到 chrome:// appcache-internals /并通过 删除其他缓存中的新缓存。

回答

2

看一看这个白皮书的更多信息,与本地存储如何Chrome的交易:https://developers.google.com/chrome/whitepapers/storage

临时存储仅限于每个应用程序的总池的20%,总池被限制为50% Chrome的可用磁盘空间永远不会填满磁盘。在向本地磁盘添加更多文件时,Chrome会相应地缩小分配给临时存储池的总量。

+0

thx散装!如何处理其他浏览器,如IE/Firefox/Opera?这是否意味着我必须创建新的功能来处理每个案例,还是有一个总体的方法? – bouncingHippo 2012-07-18 17:32:35