我已经使用 angular (5.2.9) service-worker 设置了 PWA。以下是我的配置:
{
"index": "/index.html",
"assetGroups": [{
"name": "app",
"installMode": "prefetch",
"updateMode": "prefetch",
"resources": {
"files": [
"/favicon.ico",
"/index.html"
],
"versionedFiles": [
"/*.bundle.css",
"/*.bundle.js",
"/*.chunk.js"
]
}
}, {
"name": "assets",
"installMode": "lazy",
"updateMode": "prefetch",
"resources": {
"files": [
"/assets/**"
],
"urls": [
"https://fonts.googleapis.com/**",
"https://fonts.gstatic.com/**"
]
}
}],
"dataGroups": [{
"name": "api-freshness",
"urls": [
"!/api/event"
],
"cacheConfig": {
"strategy": "freshness",
"maxSize": 30,
"maxAge": "20m",
"timeout": "9s"
}
}]
}
我试图实现的dataGroups.urls[]
是使用网络优先原则缓存每个提取,除了调用之外/api/event
,这是一个使用长期连接的 ServerSentEvents 端点。可悲的是,上面的设置并没有实现这一点。
此端点用于我的应用程序中的两个中央路由,但侦听相同类型的事件调用数据刷新。在 DevTools Application
>下检查我的应用程序Clear Storage
,我可以在客户端缓存请求时拖尾存储大小。在我使用api/event
. 然后缓存突然跳了3-4 Mb,我猜这是因为它是一个流......?
缓存调用后,每次调用api/event
都会进入两次,一次来自网络,一次来自 service-worker,并且 service-worker 调用始终处于挂起状态。通过关闭 SSE 连接,只有网络调用被取消。这样做的效果是,在使用此端点在两条路由之间来回导航几次之后,chrome 似乎用完了可用的套接字 - 进一步调用任何停留在Pending状态的端点,这反过来又离开我的应用程序处于无用状态。:-(
非常感谢您对此的任何意见。