7

出于性能考虑,我希望我的一些网页使用已被高速缓存以供脱机使用(图像,CSS等)的资源,但没有页面本身被缓存,因为内容将被动态生成。忽略HTML5脱机appcache中的当前页面,但使用缓存资源

做到这一点的一种方法是重构我的页面,以便它们通过AJAX加载动态内容或在LocalStorage中查找内容。细节可能会有所不同,但大致来说,就是这样。

如果可能,我宁愿找到一种方法来简单地指示浏览器为页面使用缓存资源(再次,图像,CSS等),但实际上不会缓存(动态生成的)HTML内容本身。

有没有办法做到这一点与HTML5离线appcache?我的印象是答案是“否”,因为:

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

我错了吗?似乎可能有一些棘手的(或不那么棘手)的方式。现在我已经输入了它,我想知道是否明确包含在appcache清单的NETWORK部分中的页面将会起作用。

回答

7

我的回答是“是”。

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

清单仅包含在主着陆页上。因此,所有资源都会在您第一次访问该网站时进行缓存,并且可以起到一定的作用。

总之,

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

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

  • 列表所有的资源在CACHE部分

  • 设置NETWORK部分被缓存到*
+2

呵呵,它实际上就像我已经使用的典型用例场景那样,就像那种开箱即用的工作。现在不要因为不先测试而感到愚蠢! – Trott

+1

您确定这种非缓存页面使用缓存资源吗?我不确定。这工作,但我认为该页面将加载服务器的资源... – pkyeck

+0

@pkyeck应用程序将使用缓存的资源,只要可用。要获取最新内容,您必须修改清单或清除缓存。一个简单的技巧是对MD5进行总结并在清单文件中写入值,以便在清单更改MD5值更改时将其写入触发缓存更新的文件。这是做服务器端btw。 – gotomanners

2

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

0

我发现正在运行的是将那些不希望缓存在appcache中的文件列入清单的NETWORK:部分。对我而言,这意味着将* .asp *添加到网络部分。现在,没有经典的asp文件或aspx文件被缓存。

相关问题