2012-07-13 12 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