2011-04-29 132 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

相关问题