2016-07-01 66 views
1

我正在使用Service Worker和Socket.io進行移動記事應用。分數存儲在數據庫中並以HTML格式呈現,並將此HTML緩存到服務工作者中。這與服務工作者想要達到的一樣,但如果更新了分數,它將顯示刷新時的舊分數。Service Worker + Socket.io:在新訪問時覆蓋緩存頁面

如何讓服務工作者在每次訪問或刷新頁面時抓取最新版本的HTML頁面?

我的代碼用於獲取和緩存:

this.addEventListener('fetch', function(event) { 
    event.respondWith(
     caches.match(event.request).then(function(response) { 
      if(response) { 
       console.log('found cached response', response); 
       return response; 
      } else { 
       console.log('response not in cache, fetching it'); 
       return fetchAndCache(event); 
      } 
     }) 
    ); 
}); 

function fetchAndCache(event) { 
    return fetch(event.request).then(function(response) { 
     return caches.open('UFA-other-1.0').then(function(cache) { 
      console.log('fetched and caching', event.request); 
      cache.put(event.request, response.clone()); 
      return response; 
     }); 
    }); 
} 

回答

0

第一關:你不能自動執行它全部採用sw-precache從谷歌?

如果不是,那麼他們的手動庫sw-toolbox可能會提供一些有用的策略。您可以選擇不同的策略,如網絡優先或最快。查看更多文檔here

要回答你的問題:一旦服務人員正確設置,將獲取所有要緩存的文件的最新版本,但這些文件只有在下次加載或重新加載頁面時纔會使用。

您將在Mozilla service worker example page上看到它們顯示一條消息,指示用戶在重新加載頁面後可以使用較新版本的頁面。

希望有幫助!