js性能优化

122 阅读3分钟

Navigation Timing API

  • Navigation Timing API 提供了可用于衡量一个网站性能的数据

1、navigationStart 表示上一个页面开始要进行跳转的最初钩子

2、unloadEventStart / End 表示前一个页面unload的时间节点

3、redirectStart / End 页面重定向发生的事件开始 | 结束

4、fetchStart / End 浏览器准备好使用http请求抓取文档的时间

5、domainLookupStart / End http开始/重新建立连接的时间 => http 版本 | 长短连接

6、connectStart / End 开始连接的时间 => 纯数据连接的时间

7、secureConnrctionStart / End https加密连接开始 | 结束时间

8、requesStart / End 请求花费时间

9、resqonseStart / End 返回花费时间

10、domLoading:开始渲染DOM树的时间 / domInteractive:完成DOM解析的时间 / domContentLoadedEventStart/End:网页内部内容加载时间 / domComplete:DOM渲染完成

11、loadEventStart / End load事件回调函数执行完毕

   (function() {
      var prefDate = window.performance.timing;
      // 页面加载总耗时
      var pageLoadTime = prefDate.loadEventEnd - prefDate.navigationStart;

   })()

Core Web Vitals - 网页性能核心指标

  • 可衡量,切反映真实用户体验 -- 加载性能、交互性、视觉稳定性
largest Contentful Paint (LCP)

-- 衡量页面的装载性能

  • 前2.5s内进行最大内容渲染 1、最大内容渲染包含哪些?
    • 图片
    • 视频
    • svg
    • 通过url()函数记载的背景图片
    • 包含了文本节点或者其他内联文本元素子集的块级元素 2、LCP值低下的原因
    • 服务响应慢
    • 阻断渲染的js和css
    • 资源的加载
    • 项目渲染 3、针对性改造
    • 缓存:离线页面、资源缓存、请求内容缓存 --> 减少浏览器对服务的请求 | 减少服务的查询 --> 强缓存、协商缓存 | 缓存机制 对于渲染阻断:css | JS进行压缩、合并、级联、内联;后置js逻辑 对于文件的优化:格式的优化、转化图片格式为jpg|webp 工程化:打包优化:压缩、分片、异步、懒加载;架构层面:拆分、异步模块、统一封装;写法:减少网络请求、及时清理垃圾
First Input Delay (FID)

衡量交互

  • 页面首次输入延迟应该小于100ms 1、js执行时间过长
    • 压缩缩小js文件
    • 延迟加载不需要的js逻辑
    • 尽量减少未使用的polyfill 2、分解耗时任务
    • 50ms长任务
    • 长任务拆分成前置或后置及多个短任务 3、workers 通过worker提高执行效率,且实时同步
Cumulative Layout Shift (CLS)

衡量视觉稳定性

  • 元素布局移动端可能发生的位置偏移量 1、不适用无尺寸元素 2、减少内部内容的插入 3、字体控制:默认字体 > 本地替换字体 > 加载字体

CWV工具 - Croe Web Vitals Annotations

大厂监控体系

1、埋点上报:点到点 + 信息采集汇总

2、数据处理:阈值设置 | 数据分类 | 数据重组

3、可视化展现:grafana(可视化监控软件) | 自研

4、告警处理(触发分派):通过 钉钉、邮件、企业微信

未来可能 - bigpipe:页面分解为若干pagelet

1、服务前端接收自客户端的https请求

2、从存储层获取数据

3、生成HTML,座位部分模块的基础

4、浏览器回去解析内容,遗留区域作为展示面板进行客户端渲染

5、加载渲染生成