复习前端:浏览器渲染机制

简介: 笔记

25.png继续复习浏览器渲染机制,浏览器会阻止网页的某些呈现,直到首先加载某些资源,同时异步加载其他资源。


浏览器的渲染流程?


1.png

大致流程如下:

  1. 处理 HTML 并构建 DOM 树。
  2. 处理 CSS 构建 CSSOM 树。
  3. 将 DOM 与 CSSOM 合并成一个渲染树。
  4. 根据渲染树来布局,计算每个节点的位置。
  5. 调用 GPU 绘制,合成图层,显示在屏幕上。

在构建 CSSOM 树时,会阻塞渲染,直至 CSSOM 树构建完成。并且构建 CSSOM 树是一个十分消耗性能的过程,所以应该尽量保证层级扁平,减少过度层叠,越是具体的 CSS 选择器,执行速度越慢。

DOM 树

2.png

CSSOM 树

3.png

4.png

渲染树

5.png


如何根据浏览器渲染机制加快首屏速度


  • 优化文件大小:HTML和CSS的加载和解析会阻塞渲染树的生成,影响首屏显示速度。因此,可以通过优化文件大小,减少CSS文件层级来加快首屏速度。
  • 避免资源下载阻塞文档解析:当浏览器解析到 <script> 标签时,会阻塞文档解析,直到脚本执行完毕,所以通常将 <script> 标签放在HTML文档的最下面,或者加上 deferasync 进行异步下载


什么是 reflow(重排),什么情况下会触发 reflow


reflow 通常是指HTML的重排或者回流。

  • 当元素的大小或位置发生变化时,需要重新计算渲染树,这就是 reflow
  • 当DOM 元素的几何属性(widthheightpaddingmarginborder )改变时触发reflow
  • DOM 元素移动或增加触发 reflow
  • 读写属性时触发 reflow ,例如:offsetTopoffsetLeftoffsetWidthoffsetHeightscrollTopscrollLeftscrollWidthscrollHeightclientTopclientLeftclientWidthclientHeight
  • 调用 window.getComputedStyle 会触发 reflow


什么是 repaint(重绘),什么情况下会触发repaint(重绘)


当 DOM 样式发生变化但不影响 DOM 的几何形状时,将触发重绘,但不会触发reflow (回流)。重绘在性能上优于回流,因为不需要更新DOM位置信息,省略了布局过程。


什么是GPU加速,如何使用GPU加速,GPU加速的缺点


  • 优点:使用 transformopacityfilters 等属性时,会直接在GPU中完成处理,改变这些属性不会造成回流和重绘
  • 缺点:GPU渲染字体会造成字体模糊,而且太多了GPU 处理可能会导致内存问题


如何减少回流


  • 使用 translate 替代 top
  • 使用 class 代替 style,减少 style 的使用
  • 和使用时的防抖和节流 resizescroll 这两个都会直接导致回流
  • 使用 visibility 替换 display:none ,因为前者只会导致重绘,后者会导致回流
  • 批量修改元素时,可以先将元素从文档流中移除,修改完成后再放入文档流中。
  • 为了避免触发同步布局事件,在获取 offsetWidth 等属性的值时,可以使用变量来存储查询结果,避免多次查询。每次查询诸如  offsetscrollclient 之类的属性时,都会触发回流
  • 对于复杂的动画效果,使用绝对定位让它们远离文档流。复杂的动画效果会频繁触发重排和重绘。可以设置动画元素的绝对定位,使其与文档流分离,避免重复回流和重绘。


相关实践学习
基于阿里云DeepGPU实例,用AI画唯美国风少女
本实验基于阿里云DeepGPU实例,使用aiacctorch加速stable-diffusion-webui,用AI画唯美国风少女,可提升性能至高至原性能的2.6倍。
相关文章
|
1月前
|
前端开发
调试前端时,在浏览器上修改参数并重新调用接口
有时候我们的页面点击过了,但是接口出问题,想修改参数再调用一次,一般是用apiPost工具把接口复制,再加上token和参数,但是这样非常的效率比较低。
42 0
|
1月前
|
前端开发
914.【前端】Taro集成towxml渲染markdown文档
914.【前端】Taro集成towxml渲染markdown文档
60 2
|
3月前
|
存储 前端开发 JavaScript
深入理解前端JavaScript执行机制
深入理解前端JavaScript执行机制
43 0
|
2月前
|
前端开发 安全 JavaScript
前端开发中的跨域资源共享(CORS)机制
【2月更文挑战第3天】 在前端开发中,跨域资源共享(CORS)机制是一个重要的安全性问题。本文将介绍CORS的概念、原理和实现方式,并探讨在前端开发中如何处理跨域资源请求,以及如何提高网站的安全性。
|
14天前
|
监控 前端开发 JavaScript
如何使用浏览器调试前端代码?
【4月更文挑战第11天】前端开发中,浏览器调试是关键技能,能提升代码质量。本文介绍了如何使用浏览器的调试工具:1) 打开调试窗口(F12或右键检查);2) Elements标签页检查DOM结构和样式;3) Console调试JavaScript,查看日志和错误信息;4) Sources设置断点调试JS文件;5) 利用Network、Performance和Memory等标签页优化性能。熟悉调试工具、利用日志和错误信息能有效定位问题,提高开发效率。
38 7
|
1月前
|
JavaScript 前端开发 算法
深入探讨前端框架Vue.js中的虚拟DOM机制
本文将深入探讨前端框架Vue.js中的虚拟DOM机制,分析其原理、优势以及在实际开发中的应用场景,帮助读者更好地理解Vue.js框架的核心特性。
|
1月前
|
前端开发 JavaScript 程序员
推荐给前端程序员的5款浏览器插件
推荐给前端程序员的5款浏览器插件
|
1月前
|
SQL 存储 JavaScript
前端浏览器调试详解版
前端浏览器调试详解版
55 0
|
2月前
|
消息中间件 JavaScript 前端开发
前端秘法进阶篇----这还是我们熟悉的浏览器吗?(浏览器的渲染原理)
前端秘法进阶篇----这还是我们熟悉的浏览器吗?(浏览器的渲染原理)
|
2月前
|
缓存 前端开发 JavaScript
在浏览器的舞台上演:前端如何挑战页面刷新的极限
在浏览器的舞台上演:前端如何挑战页面刷新的极限
58 0