当前位置: 首页 > Web前端 > JavaScript

ServiceWorker缓存相对于HTTP缓存的一些优势

时间:2023-03-27 01:00:39 JavaScript

除了对缓存逻辑提供更细粒度的控制外,ServiceWorker缓存还提供:为您的来源提供更多内存和存储:按来源HTTP缓存资源分配浏览器。换句话说,如果您有多个子域,它们都共享同一个HTTP缓存。无法保证您的来源/域的内容会长期保留在HTTP缓存中。例如,用户可以通过从浏览器的设置UI中手动清除或通过触发页面上的硬重新加载来清除缓存。使用ServiceWorker缓存,缓存内容保持缓存状态的可能性要高得多。在不稳定的网络或离线体验领域具有更大的灵活性:使用HTTP缓存,开发人员只有二元选择:缓存资源或不缓存资源。使用ServiceWorker缓存,更容易缓解应用在网络不稳定时可能出现的问题(使用stale-while-revalidate策略),或者提供完整的离线体验(使用cacheonly策略),甚至介于两者之间,例如自定义UI页面的某些部分来自serviceworker缓存,而某些部分在适当的情况下被排除在外(使用Setcatchhandler策略)。当然,HTTP缓存作为一项成熟的技术,可以作为ServiceWorker缓存的有益补充。浏览器第一次加载网页和相关资源时,会将这些资源存储在其HTTP缓存中。HTTP缓存通常由浏览器自动启用,除非最终用户明确禁用它。使用HTTP缓存意味着依靠服务器来确定何时缓存资源以及缓存多长时间。当服务器响应浏览器对资源的请求时,服务器使用HTTP响应标头告诉浏览器应该缓存资源多长时间。看一个例子:ETAG:当浏览器发现一个过期的缓存响应时,它可以向服务器发送一个小令牌(通常是文件内容的哈希值)来检查文件是否已经改变。如果服务器返回相同的令牌,则文件相同,不需要重新下载。此令牌出现在浏览器发送给服务器的HTTP请求的标头中:If-None-Match:"62e701da-63ba-gzip"policyto确定资源是否已更改的基于内容的策略,而不是ETag。