页面优化——重绘和回流[通俗易懂]

页面优化——重绘和回流[通俗易懂]一、写在前面页面优化在面试的过程中经常遇到的问题,今天就来总计一下重绘和回流的问题。二、重绘和回流是什么我们都知道一个页面从加载到完成,首先是构建DOM树,然后根据DOM节点进行几何布局形成render树(渲染树),当渲染树构建完成后,页面就根据DOM树开始布局,渲染树也根据设置的样式渲染这些节点。在这一过程中,比如我们删除DOM节点,修改一个元素的宽高,页面布局发生变化,DOM树也发生变化,那么肯定要重新构建DOm树,而DOM树和渲染树紧密相连,DOM树渲染完了,渲染树也会随之进行渲染,这个过程就

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

一、写在前面
页面优化在面试的过程中经常遇到的问题,今天就来总计一下重绘和回流的问题。
二、重绘和回流是什么
我们都知道一个页面从加载到完成,首先是构建DOM树,然后根据DOM节点进行几何布局形成render树(渲染树),当渲染树构建完成后,页面就根据DOM树开始布局,渲染树也根据设置的样式渲染这些节点。
在这一过程中,比如我们删除DOM节点,修改一个元素的宽高,页面布局发生变化,DOM树也发生变化,那么肯定要重新构建DOm树,而DOM树和渲染树紧密相连,DOM树渲染完了,渲染树也会随之进行渲染,这个过程就称为回流
在比如说,我们给一个元素修改颜色,这样的行为是不会影响页面的布局的,DOM树不会发生改变,但是颜色变了,渲染树得重新绘制,这就是重绘
所以说回流一定会触发重绘,重绘不一定触发回流。
题外话:
1、由于display:none的元素不在页面渲染,渲染树的构建不包含这些节点。但是visibilityhidden的元素会在渲染树中。因为displaynone会脱离文档流,visibility为hidden虽然看不到,但类似与透明度为0,其实还在文档流中,还是有渲染的过程。
2、尽量避免使用表格布局,当我们不给表格的td设置固定的宽度的时,一列的td的宽度会以最宽的td的宽作为渲染的标准,假设前几行的td在渲染时都渲染好了,结果下面的某行特别宽,table为了统一宽度,前几行的td会回流重新计算宽度,这是一个比较耗时的操作。
三、怎么样减少回流
回流会重构DOM树,渲染树也得重新渲染,比较麻烦,哪些行为可以引发回流,如何去避免呢?
1、DOM的删除行为
比如删除某个节点,或者给父元素插入子节点,这类操作都会触发回流。如果我们插入多个子节点的话,可以使用documentfragment
2、几何属性的变化
比如说元素的宽度变了,border变了,字体大小变了,这种直接会引发页面的布局的改变,也会触发回流。如果我们需要改变多个属性,做好的是将这些改变定义在一个class中,直接修改class名,这样只会触发一次回流。
3、元素的位置发生改变
修改一个元素的左右margin,padding之类的操作,所以在元素位移的动画,不要更改margin之类的值,使用定位脱离文档流后进行改变位置。
4、获取文章的偏移量之类的属性
例如我们需要获取scrollTop、scrollLeft、scrollWidth、offsetTop、offsetLeft、offsetWidth、offsetHeight之类的属性的时候,浏览器为了保证值的正确性也会回流进行获取,所以如果你要不多次操作,最好取完进行缓存。
5、页面初次渲染触发回流
页面的初次渲染触发回流这样无法避免。
6、浏览器窗口尺寸的改变
resize事件的发生也会触发回流。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/219131.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • RSA加密算法心得

    RSA加密算法心得RSA加密密钥是非对称的,一般是成对出现分为公钥和私钥,所以也叫非对称加密,可以公钥加密,私钥解密,也可以私钥加密,公钥解密。一般用于数据加密。

    2022年5月31日
    54
  • ElasticSearch 入门总结

    ElasticSearch 入门课程视频地址:ElasticSearch 入门一、ElasticSearch 简介1.1、什么是ElasticSearch​ 简称 ES基于Apache Lucene 构建的 开源搜索引擎,提供一个分布式多用户能力的全文搜索引擎采用 JAVA 编写的 ,提供简单易用的 RESTFul API(RESTFul web接口),当前流行…

    2022年2月27日
    38
  • HttpClient详细解释

    HttpClient详细解释Http协议的重要性相信不用我多说了,HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性(具体区别,日后我们再讨论),它不仅是客户端发送Http请求变得容易,而且也方便了开发人员测试接口(基于Http协议的),即提高了开发的效率,也方便提高代码的健壮性。因此熟练掌握HttpClient是很重要的必修内容,掌握HttpClient后,相信对于Http协议的了解会

    2025年6月1日
    0
  • Mac Navicat12.0.22 安装手册和操作说明[通俗易懂]

    Mac Navicat12.0.22 安装手册和操作说明[通俗易懂]小编的系统是MacOSCatalina10.15.4、NavicatPremiumMac12.0.22MacNavicat安装与使用

    2022年10月23日
    0
  • 学员管理系统(完整版附带源码)

    学员管理系统(完整版附带源码)学员管理系统是刚接触python时算是一个比较难的小项目,毕竟第一次接触这样的思维逻辑,不过用心学起来还是很有趣的,发现乐在其中,也就不觉得难了。下面给大家分享一下学员管理系统较为完整的代码1.主程序importsys,datetimestulist=[]stuNumlist=[]userdata={}whileTrue:userInput=showmenu()ifuserInput==”1″:addStu().

    2022年9月17日
    0
  • golang 2021激活码3月最新在线激活「建议收藏」

    golang 2021激活码3月最新在线激活,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月15日
    76

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号