2016-12-09 4 views
0

Я создаю плеер цифровых вывесок, который использует Chrome в качестве механизма отображения. Нам нужно быть в состоянии все еще путаться, если сеть опустится без чрезмерного перерыва.Хром не использует кеш после потери питания?

Chrome работает в режиме кеширования изображений, и я установил заголовок «Exipres» на месяц после доступа. Я могу установить компьютер плеера в автономном режиме и запустить приложение в течение нескольких дней без проблем. Если я перезагружу машину правильно (Start-> Shut Down), кеширование по-прежнему работает должным образом.

Проблема заключается в том, что когда Chrome выходит из строя - либо сбой, либо потеря мощности - при перезагрузке Chrome игнорирует кеш и отказывается загружать изображения. Это происходит, если я отключу питание через 5 минут после загрузки страницы, поэтому содержимое не истекает.

Я предполагаю, что Chrome установлен для игнорирования кеша после аномального выхода, чтобы предотвратить повреждение кеша из-за постоянного сбоя браузера. Однако это поведение не то, что мне нужно.

Кто-нибудь знает о командной строке arg или flag, которую я могу установить, чтобы это не происходило?

Благодарим за помощь.

+0

ли 'хром: // cache' страница содержит после ненормального выхода вашего URL изображения в? Действительно ли хром запрашивает эти изображения? Если это HTTP-заголовки, связанные с кешем, он включает в себя запросы? –

+0

chrome: // кэш не содержит URL страницы после аномального выхода. Это только после потери мощности, однако ... Даже использование диспетчера задач для убийства Chrome не приводит к потере кеша. fsutil показывает, что мой диск C не загрязнен. Так может быть, индекс кеша поврежден? Ну, чистое закрытие Chrome, вытягивание питания и перезапуск ... Все еще отказывается снимать изображения. Тем не менее, «Пуск -> Завершение работы» даже при работе с Chrome и загрузке кешированных изображений не возникает. Убив Chrome из диспетчера задач также не делает недействительным кеш. –

ответ

0

Я пробовал все, что мог придумать, чтобы сделать Chrome недействительным для локального кеша при сбое системы, и придумал пустой. Есть еще несколько человек, у которых был тот же вопрос, и я не видел ответа.

Вот что я сделал, что сделал эту работу, и если у кого-то другая проблема, это может быть обходным решением, которое вам нужно.

Я добавил служащего службы, который будет кэшировать изображения. Код ниже еще не совершенен, но должен быть местом для кого-то ... (FYI, я узнал об этом 5 минут назад, поэтому, если кто-то хочет дать мне указатель или два о том, как сделать это более элегантным, я 'все уши.)

Мы кэшируем все, что имеет тип ответа «cors», поэтому мы кэшируем только изображения, поступающие с удаленного сервера. Обратите внимание, что ваши изображения должны быть загружены с помощью https для этого.

Взятые (в основном) из: https://developers.google.com/web/fundamentals/getting-started/primers/service-workers

var CACHE_NAME = 'shine_cache'; 
var urlsToCache = [ 
    '/' 
]; 

self.addEventListener('install', function(event) { 
    // Perform install steps 
    event.waitUntil(
    caches.open(CACHE_NAME) 
     .then(function(cache) { 
     console.log('Opened cache'); 
     return cache.addAll(urlsToCache); 
     }) 
); 
}); 

self.addEventListener('fetch', function(event) { 
    //console.log('Handling fetch event for', event.request); 
    if (event.request.method == 'POST') { 
     //console.log("Skipping POST"); 
     event.respondWith(fetch(event.request)); 
     return; 
    } 
    if (event.request.headers.get('Accept').indexOf('image') !== -1) { 
     event.respondWith(
      caches.match(event.request) 
      .then(function(response) { 
       // Cache hit - return response 
       if (response) { 
        console.log("Returning from cache.", event.request); 
        return response; 
       } 

       // IMPORTANT: Clone the request. A request is a stream and 
       // can only be consumed once. Since we are consuming this 
       // once by cache and once by the browser for fetch, we need 
       // to clone the response. 
       var fetchRequest = event.request.clone(); 

       return fetch(fetchRequest).then(
        function(response) { 
         console.log("Have a response.", response); 
         // Check if we received a valid response 
         if(!response || response.status !== 200 || response.type !== 'cors') { 
          return response; 
         } 

         // IMPORTANT: Clone the response. A response is a stream 
         // and because we want the browser to consume the response 
         // as well as the cache consuming the response, we need 
         // to clone it so we have two streams. 
         var responseToCache = response.clone(); 

         caches.open(CACHE_NAME) 
         .then(function(cache) { 
          console.log("Caching response", event.request); 
          cache.put(event.request, responseToCache); 
         }); 

         return response; 
        } 
       ); 
      }) 
     ); 
    } 
}); 
Смежные вопросы