浏览器缓存

130 阅读2分钟

强制缓存

强制缓存Expires是绝对时间,到期了再请求,否则返回缓存的内容 
Http1 设置Expires,如果服务器和本地时间不一致会存在漏洞 
http1.1 cache-control :max-age=5 五秒缓存 
cache-control值: 
max-age=5 过期时间 
s-manage 代理服务缓存过期时间,只能是public时候 
no-cache 协商缓存 
no-store 不缓存 
private 资源只能被浏览器缓存
public 资源既可以被代理服务器也可以被浏览器缓存

协商缓存

last-modified 时间戳判断 
是否缓存用if-modified-since和last-modified是否相等进行判断 
缺点: 只能精确到秒,资源更新过快,毫秒级无法捕捉 资源一但修改时间戳也算更新,即使内容没有更新 
优化方案:ETag 使用文件内容识别 if-none-match 
缺点:文件过大就会消耗性能
  • 判断是否命中强缓存
status 200size:from cache
  • Expires:到期时间 绝对时间,如果修改浏览器本地时间,容易导致错乱
  • Cache-Control 相对时间,是以发送给服务器时间 Cache-Control:max-age=31536000 (31536000/24/60*60)天
  • 判断是否是协商缓存 Last-Modify/if-Modify-Since
Last-Modify/if-Modify-SinceLast-Modify:文件最后的修改时间,当浏览器再次请求的时候会在请求头里发送if-Modify-Since,
如果第二次请求if-Modify-SinceLast-Modify 时间相同,则命中缓存,
如果时间毫秒是无法识别的,精密度不够

Etag/If-None-Match

Etag:标识值,如果资源变换,
则Etag会变化,第一次会请求返回的Etag,
如果和第二次请求request中的If-None-Match标识不相同,则表示有更新 
两次请求返回的Etag和请求的if-None-Match标识不同,则标识有更新

浏览器多个标签页(多页面、多个html的应用)通讯:

  • localstorage 另外页签可以通过document的storage事件,
  • 实现不同页签的通信,其中有event可以拿到参数domain、newvalue、oldValue、key 可以监听storage事件 cookie 从document中获取+setInterval
  • websocket
  • html5新特性 sharedworker js单线程 worker可实现单页面多线程 shareworker实现多页面多线程