乐闻世界logo
搜索文章和话题

When and how does a pwa update itself

1个答案

1

In Progressive Web Applications (PWAs), a Service Worker is a script that runs in the background of the browser, responsible for managing caching and enabling offline functionality. Updating files managed by the Service Worker typically follows the following process:

File Update Process:

  1. Installing the Service Worker: When a user first visits the PWA or the Service Worker file (service-worker.js) has updates, the browser initiates the installation of the new Service Worker. At this point, the install event is triggered.

  2. Caching New Files: In the handler for the install event, code is typically written to open the cache and use the cache.addAll() method to cache a list of files. At this point, the developer can decide which new files or updated files need to be cached.

  3. Activating the New Service Worker: After installation, the new Service Worker enters the waiting state. When no pages on the website are using the old Service Worker, the new Service Worker receives the activate event. In the handler for the activate event, old caches are typically cleaned up.

  4. Managing Old Caches: During the activation phase, the developer can decide whether to delete files from the old cache or the entire old cache by comparing cache versions. This is achieved using the caches.delete method.

  5. Update Completion: Once the new Service Worker is activated and the old cache is cleared, the new cache becomes active, and subsequent network requests are handled by the new Service Worker. This ensures files are updated.

When to Update:

  • Service Worker File Changes: Every time a user visits the PWA, the browser checks for changes to the Service Worker file. If a single byte change is detected in the file content, the browser considers the Service Worker updated and initiates the installation process described above.

  • Developer-Triggered Updates: Developers can trigger updates by modifying the Service Worker file, such as updating the list of cache files or adjusting caching strategies. Version numbers can also be used to control cache updates.

  • User Clearing Browser Cache: If a user clears the browser cache, the Service Worker will reinstall on the next visit, requiring files to be re-cached.

Example:

In the installation phase of the Service Worker, a common example of updating files is as follows:

javascript
const CACHE_NAME = 'cache-v1'; const URLS_TO_CACHE = [ '/', '/styles/main.css', '/script/main.js' ]; self.addEventListener('install', (event) => { event.waitUntil( caches.open(CACHE_NAME) .then((cache) => { console.log('Opened cache'); return cache.addAll(URLS_TO_CACHE); }) ); }); self.addEventListener('activate', (event) => { const cacheWhitelist = [CACHE_NAME]; event.waitUntil( caches.keys().then((cacheNames) => { return Promise.all( cacheNames.map((cacheName) => { if (cacheWhitelist.indexOf(cacheName) === -1) { return caches.delete(cacheName); } }) ); }) ); });

In this example, a cache name and list of files to cache are defined. During the install event, the specified cache is opened and the required files are added. During the activate event, old caches not in the whitelist are removed. This ensures that when the Service Worker file is updated, the new caching strategy takes effect and old files are refreshed.

2024年6月29日 12:07 回复

你的答案