【问题标题】:How to clear Application cache (HTML5 feature) using JavaScript?如何使用 JavaScript 清除应用程序缓存(HTML5 功能)?
【发布时间】:2011-08-15 07:37:13
【问题描述】:

我们的 Web 应用程序使用应用程序缓存(缓存清单)以离线模式恢复 HTML 页面和资源。 HTML 页面将 sessionID 作为 URI 中的参数。因此,在每次注销和登录操作后,新的 HTML 页面都会保存到应用程序缓存中,因为 URI 中的 sessionId 已更改。在使用应用程序几周后,一些浏览器开始运行缓慢。应用程序缓存的大小(在 FF 3.6+ 上测试)约为 200Mb!每次登出后清除浏览器的LocalStorage,但是如何清除Application storage中的资源呢?

【问题讨论】:

  • 您说“新的 HTML 页面已保存到应用程序缓存” - 这似乎不对?浏览器将应用程序缓存作为一个整体来处理,无法自动将页面添加到应用程序缓存中。你能澄清一下吗?
  • 我使用缓存清单的后备部分的方式为:mysite.com/?SID=123456&a=1 mysite.com/?SID=123456,因此,静态页面被下载并保存到缓存中。每次注销/登录都会生成新的 sessionId,从而导致存储新的静态页面。
  • 应用程序缓存中的内容不应该在每个会话中都更改,如果要更改,存储它以供离线使用有什么意义?将静态内容放在应用程序缓存中,使用本地存储和 AJAX 加载会话特定数据,以便您可以通过 JavaScript 对其进行控制。
  • 我理解你的观点,但我使用动态缓存清单文件,为了得到它,我在 中的清单文件的 URL 中添加了一个 sessionId 没有 sessionId无法从服务器获取资源和正确结果。因此,正如我所了解的,由于动态清单文件 URI 中的 sessionId,每次生成新会话后缓存的大小都会变大。
  • 啊,你的问题……你每次都给用户一个不同的网络应用程序。

标签: firefox html application-cache


【解决方案1】:

应用程序缓存占用如此多空间的问题在于,您每次都给用户代理一个不同的离线 Web 应用程序。离线 Web 应用程序是 identified to the user agent by the URI of the cache manifest file包括查询字符串 - 不是您可能认为的主文件的 URI。

因此,通过在缓存清单 URI 中包含会话 ID,您是在告诉浏览器每个会话都获得了自己的全新应用程序,而无需使用任何以前下载的应用程序(因此,永远无法清除它们)。您每次都在安装不同的 Web 应用程序。

重新考虑如何构建应用程序,因为当前使用 HTML5 离线缓存清单提供了 no 值 - 只会导致过度下载。 Web 应用程序鼓励的架构是静态地提供所有 HTML,并通过 AJAX 获取需要会话的数据。 Web 应用程序在经典的“在服务器上动态生成带有数据的 HTML 页面”范例时无法工作。

【讨论】:

  • 问题通过临时解决方案解决:客户端通过cookies和URI获取sessionId到清单文件不t include sessionID-as a result the only one ApplicationCache object in browser with static name(without sessionId). @Stoive- sorry, cant添加信誉bkz我是这里的新用户:)
【解决方案2】:

我不确定您是否可以通过 JavaScript 控制应用程序缓存。这是清除缓存时应该由浏览器和用户处理的事情。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2012-08-02
  • 2013-04-16
  • 1970-01-01
  • 2016-07-12
  • 2016-01-18
  • 2012-11-14
  • 2017-08-17
  • 2013-03-19
相关资源
最近更新 更多