Utilizing Service Workers for Offline Capabilities in JavaScript Applications
Guidelines on implementing service workers to enable offline functionality and improve performance in JavaScript applications.
0 likes
7 views
Rule Content
--- description: Enforce best practices for implementing service workers to enable offline functionality and improve performance in JavaScript applications. globs: ["**/*.js"] tags: [service-workers, offline-capabilities, performance] priority: 2 version: 1.0.0 --- # Utilizing Service Workers for Offline Capabilities in JavaScript Applications ## Context - Applicable to JavaScript projects aiming to implement service workers for offline functionality and performance enhancements. - Assumes familiarity with JavaScript and web development concepts. ## Requirements - **Scope Definition**: Place the service worker file at the root directory to control the entire site, or explicitly define its scope during registration. - **Registration Timing**: Register the service worker after the `load` event to avoid competing with page load resources. - **Cache Versioning**: Use unique identifiers for each cache version to manage updates and prevent conflicts. - **Progressive Enhancement**: Ensure the application functions correctly without the service worker for browsers that do not support it. ## Examples <example> // Registering service worker after page load if ('serviceWorker' in navigator) { window.addEventListener('load', () => { navigator.serviceWorker.register('/sw.js', { scope: '/' }) .then(registration => { console.log('Service Worker registered with scope:', registration.scope); }) .catch(error => { console.error('Service Worker registration failed:', error); }); }); } </example> <example type="invalid"> // Registering service worker before page load if ('serviceWorker' in navigator) { navigator.serviceWorker.register('/sw.js') .then(registration => { console.log('Service Worker registered with scope:', registration.scope); }) .catch(error => { console.error('Service Worker registration failed:', error); }); } </example>