首页 > 其他分享 >为什么有时候用 translate 来改变位置, 而不是定位方式? (如top, left)

为什么有时候用 translate 来改变位置, 而不是定位方式? (如top, left)

时间:2024-10-21 22:19:38浏览次数:8  
标签:Reflow DOM top 渲染 线程 GPU translate left

在前端开发中, 我们有时候会选择使用translate来改变元素的位置, 而不是使用传统的定位方式(如top, left, right, bottom), 主要是因为 性能 方面的考虑。
具体来说, translate是通过 CSS中的transform属性实现的, 它操作的是元素的渲染层, 而不是布局层。

ps: 这里的渲染层布局层是浏览器渲染原理相关的内容

这样一来, 浏览器就不会因为位置的改变而重新计算布局, 也就是触发重排(reflow), 从而提高渲染性能。

扩展知识

延伸几个知识点:

1. Reflow 与 Repaint:

  • Reflow (重排): 是指浏览器在DOM树发生变化时重新计算元素的位置和几何形状。当使用定位属性(如top, left)改变元素位置时, 就会触发 Reflow, 这在页面元素复杂时会非常消耗性能。
  • Repaint (重绘): 是指元素的外观发生变化时 (如背景颜色, 边框等), 需要重新绘制这些元素, 但不会改变DOM树, 也就是不会涉及重新计算布局(Reflow)。相对来说, Repaint 的性能开销就小了很多。

2.Transform - Translate:

  • translate 是CSS Transform 属性的一部分, 通过矩阵变换 (matrix transformations) 来操作元素的视觉位置。 这个过程是在合成层 (compositing layer) 完成的, 不会影响文档的布局结构, 所以不会触发 Reflow, 只会触发 Repaint 。

3.硬件加速:

  • 使用 translate 通常能够借助 GPU 加速, 而传统的定位方式则主要依赖于 CPU。在渲染大量图形和动画时, GPU 的效率是显著优于 CPU 的, 能够带来更流畅的视觉效果。

4.性能优化的常见实践:

  • 在设计动画和频繁调整位置的场景下, 优先考虑使用 transform:translate(), 而不是topleft
  • 合理利用will-change属性, 告知浏览器即将发生的一些变化(如transformopacity), 预先做一些优化处理, 提高动画的流畅度。

5.实际应用中的权衡:

  • 尽管translate在性能上具有优势, 但也不是所有情况下都适用。例如,对于特定布局需求或固定定位 (fixed position)的情景, 传统的定位方式依然不可或缺。因此, 我们需要根据具体需求和性能考量作出合理选择。

进阶扩展.

浏览器渲染页面流程:

步骤简要说明
1.解析HTML解析完会得到DOM树和CSSOM树
2.样式计算遍历得到的DOM树,根据样式优先级规则为树中的每个节点计算出它最终的样式,得到一颗带有样式的DOM树
3.布局(flow)依次遍历DOM树的每一个节点, 计算每个节点的几何信息, 得到布局树
4.分层分层的好处在于, 将来某一个层改变后, 仅会对该层进行后续处理,从而提升效率。而滚动条, 堆叠上下文, transform, opacity 等样式都会或多或少的影响分层结果, 也可以通过will-change属性更大程度地影响分层结果
5.绘制(paint)为每个层单独产生绘制指令集, 用于描述这一层的内容该如何 ‘画’ 出来
6.分块前面5个步骤主要是工作在渲染主线程中, 完成绘制后, 主线程会将每个图层的绘制信息提交给合成线程, 剩余工作将由合成线程完成。合成线程首先对每个图层进行分块, 将其划分为更多的小区域, 再从线程池中调动多个线程来完成分块工作
7.光栅化合成线程会将块信息交给GPU进程,以极高的速度完成光栅化。而GPU进程会调动多个线程来完成光栅化, 并且优先处理靠近视口区域的块
8.画合成线程拿到每个层,每个块的位图后,生成一个个 指引(quad) 信息, 然后将quad提交给GPU进程, 由GPU进程产生系统调用, 提交给GPU硬件,完成最终的屏幕成像。

标签:Reflow,DOM,top,渲染,线程,GPU,translate,left
From: https://blog.csdn.net/Mz0127/article/details/143084979

相关文章

  • 电脑桌面自己变成了英文Desktop,怎么改回中文
    目录前言找到Desktop查看位置查找目标修改文件名为桌面重启电脑或重启Windows资源管理器Ctrl+Shift+Esc打开任务管理器找到Windows资源管理器重启Windows资源管理器查看修改结果前言许多人在使用电脑的时候发现,我们经常使用的桌面,不知道因为什么原因,原本......
  • RabbitMQ 通配符(Topic)模式示例
    总结自:BV15k4y1k7Ep模式说明Topic类型与Direct相比,都是可以根据Routingkey把消息路由到不同的队列。只不过Topic类型Exchange可以让队列在绑定Routingkey的时候使用通配符!Topic类型的Routingkey一般都是由一个或多个单词组成,多个单词之间以.分隔,例如:item.insert通配符规......
  • 录屏工具TOP10,探索你最爱的免费屏幕录制软件!
    现在很多时候都需要用到录屏工具,如记录在线课程、会议内容、制作游戏解说/教程视频,等等,因此一款优秀的录屏工具都会让你的创作变得更加得心应手。今天就给大家来盘点一下TOP10的免费录屏软件,看看哪一个是你的最爱吧!录屏工具1.嗨格式录屏大师录屏大师软件免费下载_高清电脑......
  • Android Framework AMS(08)service组件分析-2(startService和StopService关键流程分析)
    该系列文章总纲链接:专题总纲目录AndroidFramework总纲本章关键点总结&说明:说明:上一章节主要解读应用层service组件启动的2种方式startService和bindService,以及从APP层到AMS调用之间的打通。本章节主要关注service组件启动方式的一种:startService启动方式,分析关键API......
  • Mongodb 性能监控工具FreeMonitoring,mongostat,mongotop,Profiler,索引,分片,事务超时,Mongo
    db.users.createIndex({username:'hashed'})1#创建唯一索引db.values.createIndex({title:1},{unique:true})2#复合索引支持唯一性约束db.values.createIndex({title:1,type:1},{unique:true})3#多键索引支持唯一性约束db.inventory.createIndex({ratings:1},{uni......
  • Topk问题与堆排序(Java数据结构)
    前言:    接触完堆之后,也逐渐对堆了如指掌,最后再来讨论一下两个问题。    有如下场景:    1、全国有几千所大学,我如何能够快速找出排名前10的大学?    2、我如何对这10所大学排好序?    为了用堆解决问题,接下来我们就来一起学习Top......
  • DDCDesktopDeliveryControl的安装
    DDCDesktopDeliveryControl的安装 ......
  • XenApp_XenDesktop_7.6实战篇之一:走进桌面虚拟化世界
    XenApp_XenDesktop_7.6实战篇之一:走进桌面虚拟化世界XenApp和XenDesktop是在统一体系结构基础上构建的应用程序和桌面虚拟化解决方案,这样可以轻松进行管理,并且具有足够的灵活性,能够满足组织的所有用户的需求。 CitrixXenApp和XenDesktop是业界遥遥领先的应用程序和桌面......
  • Nvidia RTX Desktop Manager跳过硬件要求
    相信大家看了上一篇文章,肯定还想继续白*英伟达。所以今天我给大家带来了NvidiaRTXDesktopManager跳过硬件要求的教程。如果要跳过硬件要求的话,还是改NVI文件。由于NVI文件非常多,这里我就不一一介绍怎么删除了。如果感兴趣的朋友可以自己研究。这里我就直接放出懒人包了。......
  • 【北京迅为】itop-3562机器视觉opencv开发手册使用OpenCV处理图像
    iTOP-3562开发板采用瑞芯微RK3562处理器,主频2.0GHz,采用四核A53+MaliG52架构,主频2GHz,内置1TOPSNPU算力,具有多个嵌入式硬件引擎,以优化高端应用的性能。     【公众号】迅为电子----------------------------------------------------3.1颜色转换本小节代码在配套资料“iTOP-3......