【问题标题】:Omit current page from HTML5 offline appcache but use cached resources从 HTML5 离线应用缓存中省略当前页面,但使用缓存的资源
【发布时间】:2014-01-15 00:27:37
【问题描述】:

出于性能目的,我想让我的一些网页使用已缓存以供离线使用的资源(图像、CSS 等),但不让页面本身缓存,因为内容将动态生成。

实现此目的的一种方法是重构我的页面,以便它们通过 AJAX 或通过在 LocalStorage 中查找来加载动态内容。细节可能会有所不同,但从广义上讲,类似。

如果可能的话,我更愿意找到一种方法来简单地指示浏览器为页面使用缓存的资源(同样是图像、CSS 等),但实际上并不缓存(动态生成的)HTML 内容本身.

有没有办法使用 HTML5 离线应用缓存来做到这一点?我的印象是答案是否定的,因为:

  • 包含清单的任何页面都将被缓存,因此我无法在页面本身中指定缓存的资源。
  • 没有办法告诉前一个页面“使用离线资源用于其他页面,但实际上并不缓存该页面上的 HTML”。您必须指定页面本身,这意味着 HTML 将被缓存。

我错了吗?似乎可能有一些棘手(或不那么棘手)的方法。现在我已经输入了它,我想知道是否在 appcache 清单的NETWORK 部分中明确包含该页面是否可以解决问题。

【问题讨论】:

    标签: html offline-caching manifest.cache cache-manifest html5-appcache


    【解决方案1】:

    我的回答是“是”。

    我开发了一个网络应用程序,我在清单中列出了所有必要的资源,并将NETWORK 部分设置为*

    然后清单仅包含在主登录页面上。因此,所有资源都会在您第一次访问该站点时被缓存,并且它很有效。

    总之,

    • 您的一个页面必须包含清单,因此将被缓存。

      也许您可以将清单加载到 iframe 中,而不是缓存整个页面,只是一个想法。

    • CACHE部分列出所有要缓存的资源

    • NETWORK 部分设置为*

    【讨论】:

    • 哦,笨蛋,它实际上就像我已经在使用的典型用例场景一样开箱即用。现在我不会因为不先测试而感到愚蠢!
    • 你确定非缓存页面这样使用缓存的资源吗?我不确定。这可行,但我认为该页面将从服务器加载资源...
    • @pkyeck 应用程序将在可用时使用缓存的资源。要获取最新内容,您必须修改清单或清除缓存。一种巧妙的技术是将 MD5 汇总您的清单并将值写入清单文件,因此当我的清单更改时,MD5 值更改将写入文件触发缓存更新。这是在服务器端完成的。
    • 您可以显示/链接到任何示例吗?因为我的无清单页面的虚拟实现嵌入了带有清单的 iframe 使用来自服务器的“正常”资源......
    • @pkyeck 查看此问题的最佳答案。 stackoverflow.com/questions/7843531/... 在 timer-tab 链接中查看 iframe 的 js 源代码。它被缩小了,但希望你能关注它:D 如果这没有帮助,那么将我链接到你的虚拟 impl
    【解决方案2】:

    我相当肯定这个问题的答案是否定的。 如果您使用 Chrome 中的网络部分,则它会显示哪些资源是从缓存加载的,哪些是从服务器加载的。我已尝试如上所述设置 appcache,并且始终从服务器加载资源。 假设如果当前页面不在 appcache 中,那么我是否会正确地在 appcache 中检查任何资源?

    【讨论】:

      【解决方案3】:

      我发现的工作是列出那些您不希望缓存在清单的 NETWORK: 部分的 appcache 中的文件。对我来说,这意味着将 *.asp* 添加到网络部分。现在,没有任何经典的 asp 文件或 aspx 文件被缓存。

      【讨论】:

        猜你喜欢
        • 2010-11-15
        • 2015-05-05
        • 1970-01-01
        • 2011-08-15
        • 2017-07-13
        • 1970-01-01
        • 2015-12-22
        • 1970-01-01
        • 2012-03-09
        相关资源
        最近更新 更多