性能优化之往返缓存
- 往返缓存简介:
- 如何验证当前页面是否有往返缓存?
- 有哪些开发场景可以用bfcache提升性能?哪些无需关注?
- 阻止页面进行往返缓存的行为都有哪些?
- 1、缓存
- 2、强制刷新
- 3、浏览器设置
- 4、JavaScript 代码
- 5、网络问题
- 6、 iframe 本身不符合 bfcache 的条件
- 为什么会提示broadcastChannel和unload handler的往返缓存问题?
- BroadcastChannel
- 什么是“BroadcastChannel”?
- 如何找到该监听器BroadcastChannel?
- 新项目验证阻止往返缓存存在问题:
- unload
- 有哪些开发工具内置停用bfcache?
- nuxt是否还有其他问题
- usecookie bfcache fail 问题(已修复)
- 很多开发者都推崇broadcastchannel的多窗口同步模式:
最近参与了一个频道-web端项目(欢迎大家来体验),进入了性能优化阶段。发现一个之前没有映像的bfcache的lighthouse评分actionable。如下:
在解决问题之前,先来了解一下要解决的是什么
往返缓存简介:
往返缓存
总的来说,它是浏览器内置的功能,帮助我们服务开发者处理快速的前后路由切换的
对当前盛行的单页面SPA应用,虽然回退等操作原理不一样,但仍然有一定的作用,见
bfcache 和单页应用
如何验证当前页面是否有往返缓存?
测试往返缓存
有哪些开发场景可以用bfcache提升性能?哪些无需关注?
通常来讲,登录的动作是需要多窗口更新,无可避免的信息同步。但依然可以采取触发页面访问的时候再去刷新,带来较少的浏览器消耗。
除此之外,bfcache适用于场景内容重新刷新无价值、边缘信息无影响、一定单一访问/多窗口信息同步依赖刷新的网站或内容。比如:文案类型的详情页面、电商购物列表、电商购物车、基金详情页等;而
像互动社交平台类型,互动、设置等状态变化为首要信息 且 多tab之间有访问预览信息同步的内容平台反而需要尽早更新到最新内容,需要窗口间通信。
阻止页面进行往返缓存的行为都有哪些?
1、缓存
- 缓存策略:
如果服务器设置了缓存策略,但设置了 Cache-Control: no-cache 或 Cache-Control: no-store,浏览器将不会缓存页面,因此无法被缓存到 BFCache 中。
但本身的no-cache不会触发bfcache的lighthouse评分,主动设置不缓存是合理的,只有代码未规范阻塞的才是可以改善的地方。 - 缓存过期