この非常に基本的な質問があります
私はService Workerのライフサイクルを理解するよう努めています。実際には、状態を初期化および変更するものを理解しています。
私は今2つの質問を得ました:
1-chrome://inspect/#service-workers
常に2行または3行あり、すべて同じPIDで実行されているService Workerを示しています。どうして?なぜ1つだけではないのですか?
2-更新時にサービスワーカーを検査すると、次のようになりました。
どういう意味ですか? 566と570は何ですか?彼らはswのインスタンスだと思いますが、なぜ2つあるのでしょうか。そして、なぜ570はまだ待っているのですか?それが登録、インストール、アクティブ化されることを確認するにはどうすればよいですか?
3-一般的な質問
index.html
<script>
if ('serviceWorker' in navigator) {
window.addEventListener('load', function() {
navigator.serviceWorker.register('./sw.js')
.then(function(registration) {
// successful
console.log('Success: ', registration);
}).catch(function(err) {
// registration failed
console.log('Error: ', err);
});
});
}
</script>
sw.js
var cache_name = 'v1';
var cache_files = [
'./',
'./index.html',
'./style.css'
]
self.addEventListener('install', function(e){
console.log('SW install:', e);
e.waitUntil(
caches.open(cache_name)
.then(function(cache){
console.log('cache', cache);
return cache.addAll(cache_files);
})
.then(function(cache){
console.log('Cache completed');
})
)
});
self.addEventListener('activate', function(event) {
console.log('SW activate:', event);
});
self.addEventListener('fetch', function(e){
console.log('SW fetch:', e.request.url)
e.respondWith(
caches.match(e.request)
.then(function(cache_response){
if(cache_response) return cache_response;
return fetch(e.request);
})
.catch(function(err){
console.log('Cache error', err)
})
);
});
ありがとう!
Chrome Devtoolsで示されているIDは内部用です。指摘しておくだけです。つまり、すべてのService WorkerにIDで名前を付けています。それだけです。
「同時」に2つのSWが存在する理由は、1つがあり、次にページをリロードし、離れてナビゲートして戻ってきた、またはそれらの行に沿って何かを取得して、別のSWを取得したためです。ただし、この時点では、「もう1つ取得した」ときは、まだアクティブ化されておらず、以前のSWがページを制御しています。別の場所からサイトに戻ると、新しいSWが以前のSWを制御します。ページを更新するだけでは不十分です。基本的に、これはページのすべてのタブとウィンドウを閉じてから再度ロードすることを意味し、新しいSWが引き継ぎます。
新しいSWが引き継がない時間は、インストールとアクティベーションの間に発生する待機状態と呼ばれます。 SWのインストールハンドラー内からself.skipWaiting()を呼び出すことでスキップできます。
このフローの背後にある基本的な考え方は、ページが読み込まれたときにページを制御しなかったSWによってページが制御されるべきではないということです–このため、SWを登録するサイトへの最初のアクセスはそのSWによって制御されません、SWが2回目にアクティブ化されるときのみなど。
[〜#〜]本当に[〜#〜]この素晴らしい記事を読む必要があります:- サービスワーカーのライフサイクル