码农之家

前端面试题-性能优化

从输入URL到页面加载显示完成都发生了什么

Browser Process

UI Thread:搜索 or URL => 搜索引擎or请求的站点

Network Thread

  1. DNS查找IP => (https会建立TLS连接) => (收到301流程会重新再来)
  2. 设置UA等信息,发送GET请求
  3. Web server上的应用处理请求
  4. 读取Response,分析数据类型
  5. 安全检查
  6. 通知UI数据准备就绪

Renderer Process

Main Thread

  1. 解析文本构建DOM
  2. 边解析DOM边加载子资源
  3. JS阻塞解析async/defer

Main Thread

  1. 解析CSS,计算computed styles
  2. 构造布局树位置&大小

Raster Thread&Compositor Thread

  1. 创建绘制记录确定绘制的顺序
  2. 将页面拆分图层构建图层树
  3. 复合线程像素化图层创建一个复合帧
  4. 将复合帧通过ICP传回给Browser Process,再传到GPU进行渲染

首屏加载优化

首屏 – 用户加载体验的3个关键时刻

测量指标 – First Contentful Paint(FCP)

测量指标 – Largest Contentful Paint(LCP)

测量指标 – Time to Interactive(TTI)

不同方面

资源体积太大

解决办法:资源压缩、传输压缩、代码拆分、Tree shaking、HTTP/2、缓存

首页内容太多

解决办法:路由/组件/内容、lazy loading、预渲染/SSR、Inline CSS

加载顺序不合适

解决办法:prefetch、preload

JS怎样管理内存,什么情况造成内存泄露

内存管理

避免内存泄露