2016-07-01 1 views
1

Я работаю с Service Worker и Socket.io для мобильного приложения для подсчета голосов. Оценки хранятся в базе данных и отображаются в HTML, и этот HTML-код кэшируется в Service Worker. Это то, что я хочу выполнить с Service Worker, но если результаты будут обновлены, они покажут старые оценки при обновлении.Service Worker + Socket.io: перезаписать кешированную страницу при новом посещении

Как я могу заставить Service Worker получить последнюю версию 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 от Google это?

Если нет, то их справочная библиотека sw-toolbox может предложить некоторые полезные стратегии. Вы могли бы выбрать различные стратегии, такие как сетевые, или самые быстрые. См. Дополнительную документацию here.

Чтобы ответить на ваш вопрос: рабочий-сервис, после правильной настройки, получит последнюю версию всех файлов, которые вы хотите кэшировать, но эти файлы не будут использоваться до следующего загрузки или перезагрузки страницы.

Вы увидите на странице Mozilla service worker example page, что они показывают сообщение о том, что новая версия страницы доступна после перезагрузки страницы.

Надеюсь, что это поможет!