PWA 应用 Service Worker 缓存的一些可选策略和使用场景

PWA 应用 Service Worker 缓存的一些可选策略和使用场景
最新回答
假惺惺‘說爱

2026-10-18 13:53:27

PWA(渐进式Web应用)中的Service Worker缓存策略对于提升应用性能和用户体验至关重要。以下是几种可选的缓存策略及其使用场景,结合SAP电商云Spartacus UI的ngsw-config.json配置文件进行说明:

1. Network Only(仅网络)
  • 策略描述:内容必须始终从网络获取,确保最新性。
  • 使用场景:

    电商付款和结账:需要实时验证支付信息,避免缓存导致的数据不一致。

    余额报表:用户期望看到最新的账户余额,缓存可能导致信息滞后。

  • Spartacus配置:未在示例配置中直接体现,但可通过自定义dataGroups实现,例如:{ "name": "payment", "urls": ["*/payment*"], "cacheConfig": { "strategy": "freshness" // 强制网络请求 }}
2. Network Falling Back to Cache(网络优先,缓存回退)
  • 策略描述:优先尝试网络请求,失败时返回缓存内容。
  • 使用场景:

    价格和费率:需显示最新数据,但网络不稳定时可展示缓存值(需标注免责声明)。

    订单状态:用户可接受短暂延迟,但必须最终获取准确状态。

  • Spartacus配置:示例中的basesites数据组接近此策略,但通过maxAge限制了缓存有效期:{ "name": "prices", "urls": ["*/products/*/price*"], "cacheConfig": { "maxSize": 10, "maxAge": "5m", // 5分钟内优先网络,之后允许缓存 "strategy": "performance" // 实际为缓存优先,需调整为"freshness"或自定义逻辑 }}
3. Stale-while-Revalidate(缓存优先,后台更新)
  • 策略描述:立即返回缓存内容,同时后台发起网络请求更新缓存。
  • 使用场景:

    新闻提要:允许快速加载旧内容,新内容到达后静默更新。

    产品列表:提升页面响应速度,后续刷新显示最新数据。

  • Spartacus配置:需通过自定义Service Worker逻辑实现,ngsw-config.json不直接支持,但可通过dataGroups的timeout参数模拟:{ "name": "news", "urls": ["*/news*"], "cacheConfig": { "maxSize": 20, "maxAge": "1h", "timeout": "5s" // 5秒内优先缓存,之后尝试网络更新 }}
4. Cache First, Fall Back to Network(缓存优先)
  • 策略描述:优先从缓存提供内容,仅在缓存缺失时请求网络。
  • 使用场景:

    App Shells:应用框架结构变化极少,缓存可显著加快加载速度。

    公共资源:如Logo、字体等静态文件。

  • Spartacus配置:示例中的app资源组即采用此策略(通过installMode: "prefetch"预加载):{ "name": "app", "installMode": "prefetch", // 安装时缓存所有资源 "resources": { "files": ["/*.css", "/*.js"] // CSS/JS文件优先缓存 }}
5. Cache Only(仅缓存)
  • 策略描述:仅从缓存提供内容,不发起网络请求。
  • 使用场景:

    静态资源:如永不变化的favicon.ico或第三方库。

  • Spartacus配置:可通过assetGroups的updateMode: "prefetch"实现:{ "name": "static", "installMode": "prefetch", "updateMode": "prefetch", // 仅缓存,不更新 "resources": { "files": ["/favicon.ico", "/manifest.webmanifest"] }}
关键配置说明
  • 文件路径规则:

    //*.html:匹配所有HTML文件(包括子目录)。

    !//*.map:排除sourcemap文件。

  • 数据组策略:

    maxSize:缓存条目上限。

    maxAge:缓存有效期(如1d表示1天)。

    strategy:performance(缓存优先)或freshness(网络优先)。

实际应用建议
  1. 动态内容(如用户数据):使用Network Only或Network Falling Back to Cache。
  2. 半静态内容(如产品列表):Stale-while-Revalidate平衡速度与新鲜度。
  3. 静态资源:Cache First或Cache Only减少重复下载。

通过合理组合这些策略,Spartacus UI能够在离线可用性、加载速度和数据准确性之间取得最佳平衡。