Service Worker의 캐시 관리
가져오기
Service Worker는 웹 페이지의 스크립트를 병렬로 읽고 웹 페이지의 컨텍스트 외부에서 실행하는 스크립트입니다.Service Worker는 DOM과 사용자 상호 작용에 액세스할 수 없으나 postMessage API를 통해 스크립트와 통신할 수 있습니다.이것은 웹 응용 프로그램의 프록시 서버로 실행되는 것으로 캐시로 응답하거나 LocalStorage 또는 IndexedDB 에서 데이터를 가져오는 등 모든 서버의 요청을 감청하는 것을 권장합니다.따라서 오프라인에서 프로그램을 사용할 수 있다.
Service Worker의 라이프 사이클
Service worker를 효과적으로 활용하기 위해서는 서비스 수명주기에 대한 이해가 필수적입니다.
Service Worker의 라이프 사이클은 주로 3단계로 구성됩니다.
Service worker를 효과적으로 활용하기 위해서는 서비스 수명주기에 대한 이해가 필수적입니다.
Service Worker의 라이프 사이클은 주로 3단계로 구성됩니다.
등록(Registration)
설치(Installation)
활성화(액션)
등록!
첫 번째 블록은 아래 코드를 사용하여 서비스 인원을 등록한다.if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('/service-worker/sw.js', { scope: '/sw-test/' }).then(function(reg) {
// 登録がうまくいった
console.log('Registration succeeded. Scope is ' + reg.scope);
}).catch(function(error) {
// 登録に失敗しました
console.log('Registration failed with ' + error);
});
};
서비스 워커 스크립트는/service-worker/sw입니다.js에 있어요.
다음 단락에서 자세히 봅시다.
설치하다.
Servie worker가 호출된 후 처음으로 브라우저에 설치됩니다.this.addEventListener('install', function(event) {
event.waitUntil(
// キャッシュにファイルを追加する
caches.open(expectedCacheNames).then(cache => cache.addAll([
'index.html',
'style.css',
'app.js',
'cat.png',
]))
);
});
event.waitUntil은 매개 변수가 전달하는 Promise가 해결(또는 거부)될 때까지 다른 이벤트를 막을 수 있습니다.Service Worker는 캐시 Request/Response 객체 쌍캐시 인터페이스을 제공합니다.
활성화
activate 활동은 Service Worker가 Request 처리를 맡기 전에 발행한 것으로 필요하지 않은 캐시를 삭제할 수 있는 좋은 시기입니다.this.addEventListener('activate', function(event) {
event.waitUntil(
caches.keys().then(function(cacheNames) {
return Promise.all(cacheNames.map(function(cacheName) {
if (expectedCacheNames.indexOf(cacheName) === -1) {
//期限切れのキャッシュの削除
return caches.delete(keyList[i]);
}
}));
})
);
});
Fetch 이벤트
Request를 캡처하기 위해 Fetch 이벤트에 작업을 추가합니다.this.addEventListener('fetch', function(event) {
// ここでマジックが起こります!
});
event.respondWith는 사용자 지정 응답을 기록하거나 네트워크 오류를 처리할 수 있습니다.그리고 캐시를 사용할 수 있다면 요청한 자원을 반환하기만 하면 된다.let response;
event.respondWith(caches.match(event.request).catch(function() {
return fetch(event.request);
}).then(function(r) {
response = r;
caches.open(expectedCacheNames).then(function(cache) {
cache.put(event.request, response);
});
return response.clone();
}));
요청 대상과 응답 대상은 한 번만 소모되는 흐름이기 때문에 응답의 복사본을 되돌려줍니다.
마지막으로, 다음 상황에서 요청이 캐시와 일치하지 않아 네트워크를 사용할 수 없으면 기본 자원을 되돌려줍니다.catch(function() {
return caches.match('404.jpg');
})
이상
Reference
이 문제에 관하여(Service Worker의 캐시 관리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/monchan-suzuki/items/bdec5994868e65d23415
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('/service-worker/sw.js', { scope: '/sw-test/' }).then(function(reg) {
// 登録がうまくいった
console.log('Registration succeeded. Scope is ' + reg.scope);
}).catch(function(error) {
// 登録に失敗しました
console.log('Registration failed with ' + error);
});
};
Servie worker가 호출된 후 처음으로 브라우저에 설치됩니다.
this.addEventListener('install', function(event) {
event.waitUntil(
// キャッシュにファイルを追加する
caches.open(expectedCacheNames).then(cache => cache.addAll([
'index.html',
'style.css',
'app.js',
'cat.png',
]))
);
});
event.waitUntil은 매개 변수가 전달하는 Promise가 해결(또는 거부)될 때까지 다른 이벤트를 막을 수 있습니다.Service Worker는 캐시 Request/Response 객체 쌍캐시 인터페이스을 제공합니다.활성화
activate 활동은 Service Worker가 Request 처리를 맡기 전에 발행한 것으로 필요하지 않은 캐시를 삭제할 수 있는 좋은 시기입니다.this.addEventListener('activate', function(event) {
event.waitUntil(
caches.keys().then(function(cacheNames) {
return Promise.all(cacheNames.map(function(cacheName) {
if (expectedCacheNames.indexOf(cacheName) === -1) {
//期限切れのキャッシュの削除
return caches.delete(keyList[i]);
}
}));
})
);
});
Fetch 이벤트
Request를 캡처하기 위해 Fetch 이벤트에 작업을 추가합니다.this.addEventListener('fetch', function(event) {
// ここでマジックが起こります!
});
event.respondWith는 사용자 지정 응답을 기록하거나 네트워크 오류를 처리할 수 있습니다.그리고 캐시를 사용할 수 있다면 요청한 자원을 반환하기만 하면 된다.let response;
event.respondWith(caches.match(event.request).catch(function() {
return fetch(event.request);
}).then(function(r) {
response = r;
caches.open(expectedCacheNames).then(function(cache) {
cache.put(event.request, response);
});
return response.clone();
}));
요청 대상과 응답 대상은 한 번만 소모되는 흐름이기 때문에 응답의 복사본을 되돌려줍니다.
마지막으로, 다음 상황에서 요청이 캐시와 일치하지 않아 네트워크를 사용할 수 없으면 기본 자원을 되돌려줍니다.catch(function() {
return caches.match('404.jpg');
})
이상
Reference
이 문제에 관하여(Service Worker의 캐시 관리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/monchan-suzuki/items/bdec5994868e65d23415
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
this.addEventListener('activate', function(event) {
event.waitUntil(
caches.keys().then(function(cacheNames) {
return Promise.all(cacheNames.map(function(cacheName) {
if (expectedCacheNames.indexOf(cacheName) === -1) {
//期限切れのキャッシュの削除
return caches.delete(keyList[i]);
}
}));
})
);
});
Request를 캡처하기 위해 Fetch 이벤트에 작업을 추가합니다.
this.addEventListener('fetch', function(event) {
// ここでマジックが起こります!
});
event.respondWith는 사용자 지정 응답을 기록하거나 네트워크 오류를 처리할 수 있습니다.그리고 캐시를 사용할 수 있다면 요청한 자원을 반환하기만 하면 된다.let response;
event.respondWith(caches.match(event.request).catch(function() {
return fetch(event.request);
}).then(function(r) {
response = r;
caches.open(expectedCacheNames).then(function(cache) {
cache.put(event.request, response);
});
return response.clone();
}));
요청 대상과 응답 대상은 한 번만 소모되는 흐름이기 때문에 응답의 복사본을 되돌려줍니다.마지막으로, 다음 상황에서 요청이 캐시와 일치하지 않아 네트워크를 사용할 수 없으면 기본 자원을 되돌려줍니다.
catch(function() {
return caches.match('404.jpg');
})
이상
Reference
이 문제에 관하여(Service Worker의 캐시 관리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/monchan-suzuki/items/bdec5994868e65d23415텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)