乐闻世界logo
搜索文章和话题

What are the strategies for caching in PWAs?

4 个月前提问
4 个月前修改
浏览次数11

1个答案

1

PWA(渐进式Web应用)中的缓存策略主要是通过Service Worker来实现的,它能够帮助我们在离线状态下也能访问应用,提升应用的性能和用户体验。具体的缓存策略有几种常见的模式:

1. 缓存优先(Cache-First Strategy)

这种策略主要是优先从缓存中读取资源,如果缓存中没有,再从网络请求。这种策略适用于那些不常变更的资源,比如CSS文件、字体和图片等。

例子

javascript
self.addEventListener('fetch', function(event) { event.respondWith( caches.match(event.request).then(function(response) { return response || fetch(event.request); }) ); });

2. 网络优先(Network-First Strategy)

网络优先策略先尝试从网络获取最新的资源,如果网络请求失败了再从缓存中读取。这适用于对实时性要求较高的数据,例如用户的动态信息。

例子

javascript
self.addEventListener('fetch', function(event) { event.respondWith( fetch(event.request).catch(function() { return caches.match(event.request); }) ); });

3. 竞争策略(Race Strategy)

竞争策略同时从缓存和网络请求资源,哪个先返回就使用哪个。这种策略可以减少延迟,提供更快的响应。

例子

javascript
self.addEventListener('fetch', function(event) { event.respondWith( new Promise(function(resolve, reject) { var rejected = false; var reasons = 0; function maybeReject(reason) { if (rejected) { return; } reasons++; if (reasons >= 2) { reject(reason); rejected = true; } } function maybeResolve(response) { if (response.ok) { resolve(response); } else { maybeReject('No response or error response.'); } } fetch(event.request).then(maybeResolve, maybeReject); caches.match(event.request).then(maybeResolve, maybeReject); }) ); });

4. 网络与缓存更新(Network with Cache Update)

在这种模式下,应用会先显示缓存中的内容,与此同时从网络获取最新的资源并更新缓存。适合那些需要快速加载但同时需要保持更新的应用。

例子

javascript
self.addEventListener('fetch', function(event) { event.respondWith( caches.open('dynamic-cache').then(function(cache) { return cache.match(event.request).then(function(response) { var fetchPromise = fetch(event.request).then(function(networkResponse) { cache.put(event.request, networkResponse.clone()); return networkResponse; }); return response || fetchPromise; }); }) ); });

通过使用这些策略,PWA可以有效地利用缓存,改善用户体验,特别是在网络条件不佳的情况下。

2024年8月14日 22:25 回复

你的答案