布局性能优化

news/2024/12/21 19:55:54/

布局使用不当回导致卡顿、掉帧、响应慢等问题

一、布局流程

1、应用侧会根据前端UI描述创建后端的页面节点树,其中包含了处理UI组件属性更新、布局测算、事件处理等逻辑

2、页面节点树创建完成后,UI线程会对每个元素进行测算(Measure)和布局(Layout)来确定具体的位置和大小,其中Measure阶段负责确定组件对象的测量宽高;也就是该组件元素需要占用屏幕的大小,然后会在Layout阶段确定组件的最终宽高和四个顶点的位置。

3、确认了具体元素的节点信息位置后,会根据页面节点树生成当前的界面描述数据结构  ---  渲染树,渲染树由RenderNode渲染节点组成,描述了具体的元素在屏幕上的布局信息,包含大小、位置以及一些其他属性。

4、最后渲染服务的渲染线程会根据渲染树的信息执行相应的绘制工作。

布局中若视图嵌套层级深,节点数过多,会导致Measure和Layout的过程中,通过遍历测量组件大小和边界的时间过长,造成额外的计算。所以可以从减少节点树或减少测算布局耗时方面来优化布局性能

二、优化布局结构的方法

1、精简节点数

移除冗余的节点

使用扁平化布局减少节点数(RelativeContainer、Grid布局等)

2、合理控制元素的显示与隐藏

主要有两种控制方式,if条件渲染和visibility属性。

使用visibility属性控制场景:对性能要求较高并且会频繁切换元素的显示与隐藏的情况下

使用if条件渲染场景:如果组件的创建非常消耗资源,且不会立即使用,也并非频繁切换交互的情况下,只在特定条件下才会出现时,使用if条件渲染达到懒加载的效果。

3、能够在初期给定宽高的组件,在进行UI描述时,尽量给定宽高的大小,能够减少由于容器尺寸变化造成的重新测算过程的性能

4、合理使用布局组件

使用高级组件条件:因为基础组件能够保持良好的性能,在一些情况下使用高级组件能够大大减少嵌套节点层数和节点数,其带来的性能提升反而高于组件本身的性能消耗。

  • 在相同嵌套层级的情况下,如果多种布局方式可以实现相同布局效果,优选低消耗布局,例如使用Column、Row代替Flex实现相同的单行布局
  • 能够通过其他布局大幅度优化节点数的情况下,可以使用高级组件代替,今天带来更好的性能收益
  • 仅在必要的场景下使用高耗时的布局组件,如使用Flex实现折行布局、使用Grid实现二维网格布局等。


http://www.ppmy.cn/news/1536719.html

相关文章

【分布式微服务云原生】gRPC与Dubbo:分布式服务通信框架的双雄对决

目录 引言gRPC:Google的高性能RPC框架gRPC通信流程图 Dubbo:阿里巴巴的微服务治理框架Dubbo服务治理流程图 表格:gRPC与Dubbo的比较结论呼吁行动Excel表格:gRPC与Dubbo特性总结 摘要 在构建分布式系统时,选择合适的服务…

【CSS in Depth 2 精译_046】7.1 CSS 响应式设计中的移动端优先设计原则(下)

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第一章 层叠、优先级与继承(已完结) 1.1 层叠1.2 继承1.3 特殊值1.4 简写属性1.5 CSS 渐进式增强技术1.6 本章小结 第二章 相对单位(已完结) 2.1 相对…

Redis:cpp.redis++类型操作

Redis:cpp.redis类型操作 stringsetmsetmgetgetrangesetrangeincrbydecrby listlpushrpushlrangellenlpoprpopblpopbrpop setsaddsmemeberssismemberscardspopsintersinterstore hashhsethgethexistshdelhkeyshvalshmsethmget zsetzaddzrangezcardzremzscorezrank 总…

QT 通过鼠标事件实现图片的拖动和缩放

通过鼠标拖动来移动图片,并使用鼠标滚轮来缩放图片。 1、实现步骤: 1、移动图片: 使用QPoint记录图片的偏移量,当鼠标拖动时更新这个偏移量,在paintEvent()中根据偏移量绘制图片。2、缩放图片: 使用滚轮…

【网络安全】学过编程就是黑客?

前言 黑客,相信经常接触电脑的朋友们对这个词都不陌生,各类影视视频中黑客总是身处暗处,运筹帷幄,正是这种神秘感让我走向学习编程的道路,也正是如此让我明白黑客远没有我想象中那么“帅气”。 黑客 💻 黑…

本地访问autodl的jupyter notebook

建立环境并安装jupyter conda create --name medkg python3.10 source activate medkg pip install jupyter 安装完成后,输入jupyter notebook --generate-config 输入ipython,进入python In [2]: from jupyter_server.auth import passwd In [3]: passwd(algori…

常见的负载均衡

1.常见的负载均衡服务 负载均衡服务是分布式系统中用于分配网络流量和请求的关键组件,它可以帮助提高应用程序的可用性、可扩展性和响应速度。以下是一些常用的负载均衡服务: Nginx:一个高性能的Web服务器和反向代理,广泛用于实现…

外国钞票面值检测系统源码分享[一条龙教学YOLOV8标注好的数据集一键训练_70+全套改进创新点发刊_Web前端展示]

外国钞票面值检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…