Closed xccjk closed 2 years ago
缓存分类
Expires
Cache-Control
from disk cache
expires: Wed, 11 Sep 2019 16:12:18 GMT
cache-control: max-age=3600, s-maxage=31536000
Last-Modified: Fri, 27 Oct 2017 06:35:57 GMT
If-Modified-Since
ETag: W/"2a3b-1602480f459"
if-None-Match
If-None-Match: W/"2a3b-1602480f459"
HTTP缓存决策指南
// 注册service worker window.naviagtor.serviceWorker.register('/test.js').then( function() { console.log('注册成功) } ).catch(err => { console.error('注册失败') })
// test.js // 要缓存文件test.html,test.css,test.js // Service Worker会监听 install事件,我们在其对应的回调里可以实现初始化的逻辑 self.addEventListener('install', event => { event.waitUntil( // 考虑到缓存也需要更新,open内传入的参数为缓存的版本号 caches.open('test-v1').then(cache => { return cache.addAll([ // 此处传入指定的需缓存的文件名 '/test.html', '/test.css', '/test.js' ]) }) ) }) // Service Worker会监听所有的网络请求,网络请求的产生触发的是fetch事件,我们可以在其对应的监听函数中实现对请求的拦截,进而判断是否有对应到该请求的缓存,实现从Service Worker中取到缓存的目的 self.addEventListener('fetch', event => { event.respondWith( // 尝试匹配该请求对应的缓存值 caches.match(event.request).then(res => { // 如果匹配到了,调用Server Worker缓存 if (res) { return res } // 如果没匹配到,向服务端发起这个资源请求 return fetch(event.request).then(response => { if (!response || response.status !== 200) { return response } // 请求成功的话,将请求缓存起来。 caches.open('test-v1').then(function(cache) { cache.put(event.request, response) }) return response.clone() }) }) ) })
浏览器缓存机制介绍与缓存策略剖析
浏览器缓存的好处
浏览器缓存的分类和优先级
文件缓存查看方式
HTTP缓存机制探秘
缓存分类
Expires
和Cache-Control
两个字段来控制的from disk cache
expires: Wed, 11 Sep 2019 16:12:18 GMT
cache-control: max-age=3600, s-maxage=31536000
Last-Modified: Fri, 27 Oct 2017 06:35:57 GMT
If-Modified-Since
字段,为上次返回的last-modified,服务器接收到时间戳后,会对比时间戳与服务器上资源最后修改时间是否一致,来判断资源是否发生变化ETag: W/"2a3b-1602480f459"
if-None-Match
的字符串供服务端对比,格式If-None-Match: W/"2a3b-1602480f459"
HTTP缓存决策指南
MemoryCache
Service Worker Cache
Push Cache