2017-10-28 11 views
0

을 사용하십시오 ServiceWorker에서 호출 인출 않습니다. 5 번 줄에있는 가져 오기 호출은 브라우저 캐시에서 처음 보는지 여부를 결정합니다.는이 ServiceWorker는 일반 브라우저 캐시를 사용하거나 우회 서버 예를 들어</p> <p>에 항상 요청을 전송 한 전화 인출 만약 내가 궁금하네요 일반 브라우저 캐시

self.addEventListener('fetch', function(event) { 
    event.respondWith(
    caches.open('mysite-dynamic').then(function(cache) { 
     return cache.match(event.request).then(function (response) { 
     return response || fetch(event.request).then(function(response) { 
      cache.put(event.request, response.clone()); 
      return response; 
     }); 
     }); 
    }) 
); 
}); 

답변

0

좋은 질문입니다. 그리고 대답은 : SW 내부에서 가져 오기는 브라우저 컨텍스트에서 가져 오기와 똑같이 작동합니다. 즉, 브라우저의 HTTP 캐시가 검사 된 후에 만 ​​네트워크에 문의합니다. SW에서 가져 오기는 HTTP 캐시를 무시하지 않습니다.

정적 자산의 이름을 지정하는 데주의하지 않으면 경쟁 조건이 발생할 수 있습니다.

예 : 브라우저의 HTTP 캐시는

  • 이제 파일의 내용이 업데이트가 그것을 첫 번째 요청 후 7 일자
  • :

    1. asset.css은 최대 사용 기간과 서버에서 제공됩니다 ; 파일은 다르지만 이름은 여전히 ​​동일합니다 (asset.css)
    2. 파일에 대한 임의의 가져 오기 이벤트 인 asset.css가 이제는 HTTP 캐시 및 SW가 파일을 검사하기 위해 구현하는 모든 로직에서 제공됩니다 서버는 실제로이 시점에서 HTTP 캐시
    3. 에서 1 단계의 초기 파일을 얻는 데 선도하는 서버에 파일이 캐시 다른 파일과 호환되지 않을 수있는 무언가는

    완화를 나누기 : 1 내용이 변경되면 항상 정적 자산의 이름을 변경하십시오. 2. 쿼리 문자열 포함 (asset.css는 묻지 않고 asset.css? timestamporsomething)

    필수 읽기 매우 필요 : https://jakearchibald.com/2016/caching-best-practices/