从 HTML5 离线应用程序缓存中忽略当前页面,但使用缓存资源
-
25-10-2019 - |
题
出于性能目的,我希望我的一些网页使用已缓存供离线使用的资源(图像、CSS 等),但不缓存页面本身,因为内容将动态生成。
实现此目的的一种方法是重构我的页面,以便它们通过 AJAX 或通过在 LocalStorage 中查找来加载动态内容。细节可能会有所不同,但总的来说,是这样的。
如果可能的话,我更愿意找到一种方法来简单地指示浏览器使用页面的缓存资源(同样是图像、CSS 等),但实际上并不缓存(动态生成的)HTML 内容本身。
有没有办法使用 HTML5 离线应用程序缓存来做到这一点?我的印象是答案是否定的,因为:
- 包含清单的任何页面都将被缓存,因此我无法在页面本身中指定缓存的资源。
- 无法告诉前一个页面“为其他页面使用离线资源,但实际上并不缓存该页面上的 HTML”。您必须指定页面本身,这意味着 HTML 将被缓存。
我这样说有错吗?似乎可能有一些棘手(或不那么棘手)的方法来解决这个问题。现在我已经把它打出来了,我想知道是否将该页面明确地包含在 NETWORK
应用程序缓存清单的部分就可以解决这个问题。
解决方案
我的答案是“是”。
我曾在一个网络应用中工作,在其中列出了清单中的所有必要资源,并设置 NETWORK
部分 *
.
然后,清单仅包含在主登录页面上。因此,所有资源都会在您第一次访问该网站时被缓存,并且可以享受待遇。
简而言之,
您的一个页面必须包括清单,因此将被缓存。
也许您可以将清单加载到iframe中,而没有整个页面缓存,只是一个想法。
列出您的所有资源以缓存
CACHE
部分- 设置
NETWORK
部分*
其他提示
我相当肯定这个问题的答案是否定的。如果您使用 Chrome 中的“网络”部分,则会显示哪些资源是从缓存加载的,哪些资源是从服务器加载的。我尝试如上所述设置应用程序缓存,并且资源始终从服务器加载。我是否正确地假设,如果当前页面不在应用程序缓存中,那么它就不会费心在应用程序缓存中检查任何资源?
我发现正在工作的是列出您不希望在网络中appcache中缓存的文件:清单的部分。对我来说,这意味着将 * .asp *添加到网络部分。现在,没有一个经典的ASP文件或ASPX文件被缓存。