客户端容器2 | 青训营笔记

58 阅读2分钟

Chrome运行原理-读取响应

  1. 网络线程接受到HTTP响应后,先检查响应头的媒体类型(MIME TYPE)
  2. 如果响应主体是一个HTML文件,浏览器将内容交给渲染进程处理
  3. 如果拿到的是其他类型文件,比如zip,exe等,则交给下载管理器处理

Chrome运行原理-寻找渲染进程

  1. 网络线程做完所有检查后,会告知主进程数据已准备完毕,主进程确认后为这个站点寻找一个渲染进程
  2. 主进程通过IPC消息告知渲染进程去处理本次导航
  3. 渲染进程开始接收数据并告诉主进程自己已开始处理,导航结束,进入文档加载阶段

渲染进程-资源加载

  1. 收到主进程消息后,开始加载HTML文档
  2. 除此之外,还需要加载子资源,如img,css,js脚本

渲染进程-构建渲染树

  1. 构建DOM树,将HTML文本转化成浏览器能理解的结构
  2. 构建CSSOM树 3.构建渲染树,渲染树是DOM树和CSSOM树的结合

渲染进程-页面布局

  1. 根据渲染树计算每个节点的位置和大小
  2. 在浏览器页面区域绘制元素边框
  3. 遍历渲染树,将元素以盒模型的形式写入文档流

渲染进程-页面绘制

  1. 构建图层:为特定的节点生成专用图层
  2. 绘制图层:一个图层分成很多个绘制指令,然后将这些指令按照顺序组成一个绘制列表,交给合成线程
  3. 合成线程接收指令生成图块
  4. 栅格线程将图块进行线程化
  5. 展示在屏幕上

前端性能performance

  1. 时间都花在哪? script解析,rendering,painting,system,idle
  2. 什么情况下卡顿 某个js执行太长

首屏优化

  1. 压缩、分包、删除无用代码
  2. 静态资源分离
  3. JS脚本非阻塞加载 放在body底部
  4. 缓存策略 CSS、JS、图片用长缓存
  5. SSR 运用框架
  6. 预置loading、骨架屏

渲染优化

  1. GPU加速(CSS3,1.原生界面透明度opacity 2.用transform做动画 一般会新建图层,开发时考虑到某个元素会用上GPU加速,可以给他设置一个属性repaint)
  2. 减少回流、重绘(1.transform代替left、top 2.需要隐藏元素时display:none会引起回流,用visibilty代替 3.不要使用tab布局)
  3. 离屏渲染(开辟一块内存,把要渲染的东西渲染好,添加的时候直接添加上去,用canvas时用离屏渲染提升性能)
  4. 懒加载(将图像资源提前加载到本地,要使用资源时直接从缓存取)