서비스 워커 등록
- sw-toolbox:
sw-toolbox
는 서비스 워커 등록 기능을 제공하지 않지만, 등록된 서비스 워커 내에서 네트워크 요청을 처리하고, 캐싱 전략을 구현하는 데 중점을 둡니다. 이 패키지는 서비스 워커의 캐싱 로직을 유연하게 설정할 수 있도록 도와줍니다. - sw-precache:
sw-precache
는 서비스 워커 등록 기능을 제공하지 않지만, 미리 캐시할 자산을 정의하고, 이를 자동으로 캐시하는 서비스 워커 코드를 생성합니다. 이 패키지는 주로 캐싱에 집중하며, 서비스 워커 등록은 개발자가 직접 처리해야 합니다. - register-service-worker:
register-service-worker
는 서비스 워커를 쉽게 등록하고 관리할 수 있는 API를 제공합니다. 이 패키지는 서비스 워커의 생명주기 이벤트(설치, 활성화, 업데이트 등)를 간편하게 처리할 수 있도록 도와줍니다.
캐싱 전략
- sw-toolbox:
sw-toolbox
는 다양한 캐싱 전략(캐시 우선, 네트워크 우선, 캐시-네트워크 등)을 지원합니다. 이 패키지는 개발자가 필요에 따라 유연하게 캐싱 전략을 설정하고, 동적 캐싱도 구현할 수 있도록 도와줍니다. - sw-precache:
sw-precache
는 주로 프리캐싱(pre-caching) 전략을 사용하여, 빌드 시 미리 정의된 자산을 캐시합니다. 이 패키지는 정적 자산을 자동으로 캐시하여 오프라인에서도 접근할 수 있도록 합니다. - register-service-worker:
register-service-worker
는 캐싱 전략을 직접 제공하지 않지만, 서비스 워커의 생명주기 이벤트를 활용하여 개발자가 원하는 캐싱 로직을 구현할 수 있도록 지원합니다.
동적 캐싱
- sw-toolbox:
sw-toolbox
는 동적 캐싱을 지원하며, 네트워크 요청에 따라 실시간으로 자산을 캐시할 수 있습니다. 이 패키지는 동적 캐싱을 쉽게 구현할 수 있는 API를 제공합니다. - sw-precache:
sw-precache
는 동적 캐싱을 지원하지 않으며, 정적 자산을 미리 캐시하는 데 중점을 둡니다. 동적 자산 캐시는 개발자가 별도로 구현해야 합니다. - register-service-worker:
register-service-worker
는 동적 캐싱 기능을 제공하지 않지만, 서비스 워커 내에서 개발자가 직접 동적 캐싱 로직을 구현할 수 있습니다.
오프라인 지원
- sw-toolbox:
sw-toolbox
는 오프라인 지원을 위한 캐싱 전략을 개발자가 설정할 수 있도록 도와줍니다. 이 패키지는 오프라인 상태에서도 자산에 접근할 수 있도록 캐싱 로직을 유연하게 구현할 수 있습니다. - sw-precache:
sw-precache
는 오프라인 지원을 위해 정적 자산을 미리 캐시합니다. 이 패키지는 오프라인 상태에서도 미리 캐시된 자산에 접근할 수 있도록 합니다. - register-service-worker:
register-service-worker
는 오프라인 지원 기능을 제공하지 않지만, 서비스 워커의 생명주기 이벤트를 활용하여 오프라인 상태에서의 동작을 개발자가 직접 구현할 수 있습니다.
사용 예시
- sw-toolbox:
서비스 워커 동적 캐싱 예시
import 'sw-toolbox'; // 캐시 우선 전략 설정 swToolbox.router.get('/api/data', swToolbox.cacheFirst, { cache: { name: 'my-cache', maxAgeSeconds: 24 * 60 * 60, // 1일 }, }); // 네트워크 우선 전략 설정 swToolbox.router.get('/api/real-time', swToolbox.networkFirst); // 캐시-네트워크 전략 설정 swToolbox.router.get('/images/', swToolbox.cacheFirst, { cache: { name: 'image-cache', maxEntries: 50, }, });
- sw-precache:
서비스 워커 프리캐싱 예시
// sw.js self.addEventListener('install', (event) => { event.waitUntil( caches.open('my-cache').then((cache) => { return cache.addAll([ '/', '/index.html', '/styles.css', '/script.js', '/image.png', ]); }) ); }); self.addEventListener('fetch', (event) => { event.respondWith( caches.match(event.request).then((response) => { return response || fetch(event.request); }) ); });
- register-service-worker:
서비스 워커 등록 및 관리 예시
import { register } from 'register-service-worker'; register('/sw.js', { ready() { console.log('서비스 워커가 활성화되었습니다.'); }, registered() { console.log('서비스 워커가 등록되었습니다.'); }, cached() { console.log('서비스 워커가 캐시되었습니다.'); }, update() { console.log('서비스 워커가 업데이트되었습니다.'); }, updated() { console.log('서비스 워커가 새로 고쳐졌습니다.'); }, offline() { console.log('오프라인 상태입니다.'); }, error(error) { console.error('서비스 워커 등록 중 오류 발생:', error); }, });