【问题标题】:SPA - Should servers http cache be turned off for all pwa related resources?SPA - 是否应该为所有 pwa 相关资源关闭服务器 http 缓存?
【发布时间】:2019-04-05 11:10:39
【问题描述】:

是否应该使用来自服务器的任何类型的缓存标头来提供任何与 PWA 相关的资源,或者我们是否应该通过完全关闭它来将经典的 http 缓存从我们的方式中移除?

也就是说,http 缓存头应该是什么:

  1. 清单文件

    与此相关,新版本的清单文件(例如更改了网站图标)如何到达客户端?

  2. 服务工作者 js 文件 (这个有点棘手,因为浏览器每 24 小时检查一次新版本,所以一些缓存可能会很好?)

  3. index.html(水疗中心的入口点)

我的理解是它应该完全关闭,所有缓存都应该由 service worker 处理,但那里似乎有不同的信息,很难提取最佳实践。

【问题讨论】:

    标签: service-worker progressive-web-apps


    【解决方案1】:

    https://web.dev/reliable/http-cache 提供了一些指导,以及网络上的许多其他资源。

    一般来说,构建 PWA 并引入服务工作者不会改变您应该遵循的 HTTP 缓存最佳实践。

    对于在其 URL 中包含版本信息的资产(如 /v1.0.0/app.js/app.1234abcd.js),并且您知道给定 URL 的内容甚至不会更改,您应该使用 Cache-Control: max-age=31536000

    对于在其 URL 中不包含版本信息的资产(如大多数 HTML 文档以及 /manifest.json,如果您不包含哈希),您应该设置 Cache-Control: no-cacheETagLast-Modified,以确保之前缓存的响应在使用前被重新验证。

    对于你的 service worker 文件本身,现代浏览器的 will ignore the Cache-Control header 值是你默认设置的,所以这并不重要。但最好还是使用Cache-Control: no-cache,这样旧版浏览器会在使用前重新验证它。

    【讨论】:

    • 非常感谢您的回答!您能否再验证一个细节:manifest.json 应该缓存在 service worker 中还是应该没有任何缓存? (为了更改应用程序名称、网站图标等)还是应该由serviceworker.js 文件本身控制这些更改的周期,以便如果检测到新版本,也会从服务器获取新清单?简而言之:如何确保可靠的清单文件相关更改?
    • 您应该在 Service Worker 中缓存 manifest.json。您需要制定某种策略来确保最终在 SW 中缓存的所有未版本化 URL 最终得到更新——如果您想提前缓存它们,或者更简单的方法,developers.google.com/web/tools/workbox/modules/… 之类的东西可以提供帮助,喜欢developers.google.com/web/fundamentals/instant-and-offline/…
    • (我知道这可能超出了单个问题的范围,但我最终会解决这个问题)确实会更改 favicon,例如,在已添加到主屏幕的应用程序清单文件中显示更改或应该重新添加到主屏幕吗? (是/否就足够了,我接受你的回答)非常感谢,你已经解决了我身边的很多难题!
    猜你喜欢
    • 2013-02-10
    • 1970-01-01
    • 2012-10-22
    • 1970-01-01
    • 1970-01-01
    • 2014-11-12
    • 2021-12-30
    • 1970-01-01
    • 2015-01-21
    相关资源
    最近更新 更多