2011-04-29 118 views
5

我們的Web應用程序使用應用程序緩存(緩存清單)以離線模式恢復HTML頁面和資源。 HTML頁面具有會話ID作爲URI中的參數。因此,在每次註銷和登錄操作之後,新的HTML頁面將保存到應用程序緩存中,因爲sessionId已在URI中更改。經過幾周的應用程序處理後,一些瀏覽器開始工作變慢。應用程序緩存的大小(在FF 3.6+上測試)大約爲200Mb!每次註銷後,我們會清除瀏覽器的LocalStorage,但是如何清除應用程序存儲中的資源?如何使用JavaScript清除應用程序緩存(HTML5功能)?

+0

你說'新的HTML頁面被保存到應用程序緩存' - 這看起來不正確?瀏覽器整體處理應用程序緩存,因此無法自動將頁面添加到應用程序緩存。你能澄清一下嗎? – Stoive 2011-04-29 07:45:39

+0

我使用「mysite.com/?SID=123456&a=1 mysite.com/?SID = 123456」方式使用緩存清單的回退部分,因此,靜態頁面將被下載並保存到緩存中。每個Logout/login都會生成新的sessionId,導致存儲新的靜態頁面。 – SAHbKA 2011-04-29 09:44:27

+0

應用程序緩存中的內容不應更改每個會話,如果它將要更改,那麼將其存儲爲脫機使用的意義何在?將靜態內容放入應用程序緩存中,使用本地存儲和AJAX加載會話特定數據,以便您可以通過JavaScript控制它。 – robertc 2011-04-29 10:11:32

回答

7

應用程序緩存佔用了太多空間的問題是您每次都要爲用戶代理提供不同的脫機Web應用程序。一個離線的網絡應用程序是identified to the user agent by the URI of the cache manifest file,,包括查詢字符串 - 而不是您可能認爲的主文件的URI。

因此,通過將會話ID包含在緩存清單URI中,您告訴瀏覽器每個會話都會獲得自己的全新應用程序,而無需使用任何先前下載的應用程序(因此,永遠無法清除它們出)。您每次都安裝不同的Web應用程序。

重新考慮您如何構建您的應用程序,因爲目前使用HTML5脫機緩存清單提供的值爲值 - 僅導致過度下載。 Web應用程序鼓勵的架構是靜態提供所有HTML,並通過AJAX提取需要會話的數據。當構建經典的「動態生成帶有服務器數據的HTML頁面」範例時,Web應用程序不起作用。

+0

該問題通過臨時解決方案得以解決:客戶端通過cookie和URI獲取sessionId以清單文件不包含sessionID-作爲導致瀏覽器中的唯一一個ApplicationCache對象具有靜態名稱(不帶sessionId)。 @ Stoive-抱歉,無法添加聲望bkz我是一個新用戶:) – SAHbKA 2011-04-29 15:11:07

+0

很高興聽到它的工作:) – Stoive 2011-04-30 01:24:11

0

我不確定你是否可以控制JavaScript的應用程序緩存。這是清除緩存時應由瀏覽器和用戶處理的內容。

+0

主要問題是,使用我們的Web應用程序的用戶無權使用瀏覽器的標準方法從瀏覽器中清除緩存。設備(操作系統,瀏覽器)非常有限,瀏覽器選項僅限於它們 – SAHbKA 2011-04-29 08:15:37

+1

也許以下擴展可能有所幫助? http://sites.google.com/site/keigoattic/home/webrelated#TOC-Firefox-HTML5-Offline-Cache-and-Loc – jonjbar 2011-04-29 09:23:21

+0

您可以通過JavaScript手動觸發更新,但僅此而已:http:// www.whatwg.org/specs/web-apps/current-work/multipage/offline.html#applicationcache – Stoive 2011-04-29 12:59:36

相關問題