我将Workbox配置为使用“ staleWhileRevalidate”策略缓存图像:
workbox.routing.registerRoute(
new RegExp('\.(?:png|gif|jpg|jpeg|webp|svg)'),
workbox.strategies.staleWhileRevalidate({
cacheName: 'image_cache'
})
);
现在,尽管在大多数情况下可以正常工作,但在用户更新其头像时会出现问题。我的服务器通过以下方式更新用户的头像:
新的头像图片将上传到服务器,
服务器将图像保存到同一路径并覆盖先前的用户头像
服务器技术成功更新头像的客户端
我在Java脚本中执行了以下操作来处理头像更新:
update_avatar().then(()=>{
window.location.reload(true)
})
在我的本地测试中不运行Workbox的情况下,此方法工作正常。但是使用Workbox时,因为它将使用缓存的图像,所以当用户更新其头像时,它将无法显示最新的头像。用户需要手动刷新页面两次才能显示较新的头像,这很烦人。
我猜最简单的方法是在服务器端将图像保存到新路径,但是在客户端有很好的解决方案,因此我不必更改服务器结构。