Показывать автономный кеш, когда сервер недоступен

1

Возможно ли показать автономный кеш моего сайта, когда сервер не работает?

Все примеры, которые я могу найти в отношении автономных страниц, связаны с отключением клиента. Мне нужно показать пользователю кешированную версию моего сайта, если сервер не может быть достигнут.

Я прочитал о манифесте кэша в HMTL 5, но он удаляется и вызывает множество проблем.

Что можно сделать без использования каких-либо других серверов балансировки нагрузки?

  • 0
    Вы смотрели в LocalStorage ?
  • 0
    Как это будет работать, если сервер не может быть достигнут? Я все еще должен был бы иметь некоторый загруженный JavaScript где-нибудь в кэше? Или, может быть, вы думали использовать его в сочетании с Cache Manifest?
Показать ещё 4 комментария
Теги:
service-worker
offline-caching

1 ответ

2
Лучший ответ

Недавно я узнал, что с API-интерфейсом Fetch и сервисными работниками его мертвый просто:

Во-первых, вы регистрируете Служащего:

  if (!navigator.serviceWorker) return;

  navigator.serviceWorker.register('/sw.js')

Затем настройте его для кэширования, что нужно:

self.addEventListener('install', function(event) {
  event.waitUntil(
    caches.open(staticCacheName).then(function(cache) {
      return cache.addAll([
        '/',
        'js/main.js',
        'css/main.css',
        'imgs/icon.png',      
      ]);
    })
  );
});

И используйте API Fetch для получения кешированных строк, если нет ответа от вызова:

self.addEventListener('fetch', function(event) {
  event.respondWith(
    caches.match(event.request).then(function(response) {
      return response || fetch(event.request);
    })
  );
});

если вам нужно получить кешированную версию, только если сервер не работает, попробуйте что-то вроде:

self.addEventListener('fetch', function(event) {
  event.respondWith(
    return fetch(event.request).then(function(response) {
     if (response.status !== 200) {        
       caches.match(event.request).then(function(response) {
         return response;
       }).catch(function(error) {
         console.error('Fetching failed:', error);
         throw error;
      });
    })
  );
});

ps, используя API Fetch, кажется гораздо более приятным, чем реализация старого и неприятного XMLHttpRequest.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню