【发布时间】:2019-02-26 15:09:23
【问题描述】:
有很多示例可以使用类似于以下内容的单个缓存来初始化 Service Worker:
let cacheName = 'myCacheName-v1';
let urlsToCache = ['url1', 'url2', url3'];
self.addEventListener('install', function (event) {
event.waitUntil(
caches.open(cacheName).then(function (cache) {
return cache.addAll(urlsToCache);
}).then(function () {
return this.skipWaiting();
})
);
});
我希望在我的 Service Worker 上初始化多个缓存。其动机是根据资产的变化趋势(例如,静态应用数据与 css、javascript 等)对资产进行分组。使用多个缓存,我可以更新单个缓存(通过版本化缓存名称)作为缓存中的文件更改。理想情况下,我希望设置类似于以下的结构:
let appCaches = [{
name: 'core-00001',
urls: [
'./',
'./index.html', etc...
]
},
{
name: 'data-00001',
urls: [
'./data1.json',
'./data2.json', etc...
]
},
etc...
];
到目前为止,我的最佳尝试类似于:
self.addEventListener('install', function (event) {
appCaches.forEach(function (appCache) {
event.waitUntil(
caches.open(appCache.name).then(function (cache) {
return cache.addAll(appCache.urls);
}));
});
self.skipWaiting();
});
这种方法似乎有效。但是,对于服务人员和承诺,我仍然是新手。有些事情告诉我,这种方法有一个我太缺乏经验而无法识别的陷阱。有没有更好的方法来实现这一点?
【问题讨论】: