当前位置: 首页 > news >正文

页面的重排和重绘?

思路: 网页渲染HTML文件到浏览器的过程->定义->如何优化

网页渲染HTML文件到浏览器的过程
  1. HTML 文件通过HTML解析器解析生成DOM树;

  1. CSS文件通过CSS解析器生成CSSOM树;

  1. DOM树和CSSOM树生成渲染树(render tree);

  1. 生成布局,浏览器根据render tree进行布局,并计算各个节点的几何信息;(排列)

  1. 将节点绘制到屏幕上;(绘制)

什么是重排和重绘?

重绘:元素的外观改变,如:文字颜色透明度,背景颜色等;

重排:重新生成布局,重新排列元素。分为局部范围重排和全局范围重排

局部重排:对渲染树的某个部分或者某个渲染对象进行重新布局。 如:一个dom的宽高等几何信息定死,在dom内触发了重排,就只会重排该dom内部的元素而不影响到外界。

全局重排:从根节点html对整个渲染树进行重新布局。

优化:

1. 减少重排的次数

①不要频繁的操作样式,而是统一的在变量中编辑

//bad
var top = 10;
var left = 10;
// 第一次重排
el.style.top = top + "px";  //el就是获取dom节点,详细的可看如何获取dom节点的方法
// 第二次重排
el.style.left = left + "px";
// good
el.style.cssText += ";top:" + top + "px;left:" + left + "px";
// 因为cssText会覆盖之前的样式,所以需要采用叠加的方式

②离线操作元素:

1>使用display:none。(先拿掉再操作最后显示,两次重排)

个人理解:对这个节点进行操作时,先添加display:none样式(重排第一次);再进行一些操作;移除display:none样式(重排第二次)

2>通过document.Fragment先创建一个dom节点,对这个节点进行操作,再把这个元素添进去(重排一次)

document.createDocumentFragment(); //返回一个 documentFragment 类型的对象
//documentFragment 不是真实 DOM 树的一部分,
//它的变化不会触发 DOM 树的重新渲染,且不会导致性能等问题。

③使用fixed和 absolute将节点脱离文档流。这样子元素的重排的开销较小。

④分离读写操作

2.减小重排的范围

①尽量以局部布局的形组织HTML,使各个元素相互独立

②尽可能在底部元素上设置样式,削弱修改样式时的影响

③尽量不使用table布局

附加题:css的隐藏方式,至少说出三种,是否导致了重排?

1.display:none ; 导致重排,因为涉及到了dom的创建和销毁

2.visibility: hidden; 不会导致重排,因为这个dom节点还是存在

3.opacity:0 不会导致重排,相当于只是改变了字体颜色,只会引起重绘

4.width:0;heigth:0;overflow:hidden; 导致重排,改变了dom节点的几何信息

5.把这个元素移动到不可见区域等

6.。。。

http://www.lryc.cn/news/42917.html

相关文章:

  • 人脸检测-python和c++实现
  • PowerJob源码环境搭建
  • 天梯赛刷题小记 —— L2
  • Prometheus监控实战系列十九:监控Kubernetes集群(上)
  • 番茄学习法——亲测超级好用
  • vue 项目中使用高德地图
  • 【每日一题】病人排队
  • 【数据结构】链表OJ题
  • 冒泡 VS 插入 VS 选择——谁更胜一筹?(附排序源码)
  • [python tools] 今天看到另一个配置工具 YACS,所以做下笔记
  • Prometheus cadvisor容器监控和node-exporter节点监控
  • 机器学习|正则化|评估方法|分类模型性能评价指标|吴恩达学习笔记
  • python迭代器详解
  • 关于Docker逃逸
  • @Autowired和@Resource区别
  • 动态内存管理详细讲解
  • Python和Excel的完美结合:常用操作汇总(案例详析)
  • 卡特兰数、斯特林数基础
  • STL——mapmultimap和setmultiset
  • 2023热门抖音权重查询小程序源码
  • 153.网络安全渗透测试—[Cobalt Strike系列]—[生成hta/exe/宏后门]
  • 如何成为优秀的程序员
  • 多线程(四):线程安全
  • [ROC-RK3568-PC] [Firefly-Android] 10min带你了解Camera的使用
  • C++之模拟实现string
  • SpringBoot实战(十三)集成 Admin
  • mke2fs命令:建立ext2文件系统
  • 免费分享一个springboot+vue的办公系统
  • STM32数据搬运工DMA
  • 4、操作系统——进程间通信(2)(system V-IPC介绍)