布局性能优化

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

一、布局流程

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.rhkb.cn/news/442929.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32中断——外部中断

目录 一、概述 二、外部中断(Extern Interrupt简称EXTI) 三、实例-对射式红外传感器 1、配置中断: 2 、完整代码 一、概述 中断:在主程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当…

linux下创建软链接失败

最近在研究isce to stamps,在走流程的过程中,看了b站上Dr.Liu的视频和David Bakert的manual,按照manual进行了参数的设置,接着执行了make_single_reference_stack_isce命令,但是一直报错,发现这个报错还是国庆出去旅游的时候,想着在酒店把这个问题解决掉,但是每天早出晚…

20241005给荣品RD-RK3588-AHD开发板刷Rockchip原厂的Android12时使用iperf3测网速

20241005给荣品RD-RK3588-AHD开发板刷Rockchip原厂的Android12时使用iperf3测网速 2024/10/5 14:06 对于荣品RD-RK3588-AHD开发板,eth1位置上的PCIE转RJ458的以太网卡是默认好用的! PCIE TO RJ45:RTL8111HS 被识别成为eth0了。inet addr:192.…

QT学习笔记1(QT和QT creator介绍)

QT学习笔记1(QT和QT creator介绍) Qt 是一个跨平台的应用开发框架,主要用于图形用户界面(GUI)应用的开发,但也支持非GUI程序的开发。Qt 支持多种平台,如Windows、macOS、Linux、iOS和Android&a…

【源码+文档+调试讲解】宜家宜业物业管理系统node.js框架

摘 要 近年来,科技飞速发展,在经济全球化的背景之下,互联网技术将进一步提高社会综合发展的效率和速度,互联网技术也会涉及到各个领域,而宜家宜业物业管理系统在网络背景下有着无法忽视的作用。信息管理系统的开发是…

浙江所有省级医院体检报告查询上线浙里办!

在医院完成体检后不知道什么时候出报告 体检报告出来后又要跑一次医院去拿报告 历年体检报告没保管好 往年体检报告找不到了 ………… ​编辑 为解决这些问题,浙江省卫生健康委结合“两卡融合、一网通办”工作的推进,不断丰富电子健康医保卡的功能&#…

JVS·智能BI数据可视化图表:普通列表与分组列表配置全解析

使用场景 在可视化配置中,很多场景中需要图形和详细信息的融合展示,那么在图表中可以新增普通列表与分组列表的配置。如下图所示: 配置说明 1、新增组件:配置入口如下图所示,新增组件时,选择普通列表与分…

用策略性文本序列影响大模型的输出

大型语言模型(LLMs)正越来越多地被集成到搜索引擎中,以提供针对用户查询的自然语言响应。用户也越来越依赖这些模型来做出快速而简便的购买决策。在本研究中,我们探讨了LLMs的推荐是否可以被操控以提升产品的可见性。 我们证明&a…

经纬恒润荣登2024北京民营企业科技创新百强榜单

9月底,北京市工商业联合会联合有关部门正式发布了2024年北京民营企业“14”百强榜单,经纬恒润凭借其在科技创新领域的卓越表现,再次荣获“北京民营企业科技创新百强”称号,彰显了公司在技术创新和研发实力方面的强劲竞争力。 此次…

《深度学习》循环神经网络RNN 结构及原理解析

目录 一、关于RNN 1、传统神经网络存在的问题 2、什么是循环神经网络 3、RNN特点 二、RNN基本结构 1、RNN基本结构 2、推导方式 注意: 3、循环的由来 4、RNN的局限性 一、关于RNN 1、传统神经网络存在的问题 无法训练出具有顺序的数据,模型搭…

手机使用技巧:8 个 Android 锁屏移除工具 [解锁 Android]

有时候,您会被锁定在自己的 Android 设备之外,而且似乎不可能重新进入。 一个例子就是你买了一部二手手机,后来发现无法使用。另一种情况是你忘记了屏幕锁定密码和用于验证密码的 Google 帐户凭据。这种情况很少见,但确实会发生&…

A股牛市来袭,资本涌动:加密市场的出路与机遇

近期,随着A股的强劲反弹,不少加密市场的投资者,尤其是一些KOL(关键意见领袖),开始转移资金并公开建议进军A股。这种趋势反映出部分投资者对加密市场的信心动摇,尤其是在全球宏观经济不确定性加剧…

Qt应用程序logo那些事儿

前言 软件的logo一般跟公司的版权、商标、创意、设计密切相关,一般软件在开发之初都会特意设计好,以提高应用软件的辨识度 1 安装包logo EXE压缩包的logo,可以在Inno Setup Compiler的脚本里边设定,这个可以参考文章 2 可执行…

PyTorch单机多卡训练(无废话)

目前大家基本都在使用DistributedDataParallel(简称DDP)用来训练,该方法主要用于分布式训练,但也可以用在单机多卡。 第一步:初始化分布式环境,主要用来帮助进程间通信 torch.distributed.init_process_g…

深圳市步步精科技有限公司荣获发明专利,彰显技术研发实力

2024年8月13日,深圳市步步精科技有限公司(BBJconn)正式获得了其新开发的防水连接器专利,授权公告号为CN 118352837 B。这项技术的突破标志着公司在连接器领域的持续创新,进一步巩固了其行业领先地位。 专利技术概述 此…

成都睿明智科技有限公司真实可靠吗?

在这个日新月异的电商时代,抖音作为短视频与直播电商的佼佼者,正以前所未有的速度重塑着消费者的购物习惯。而在这片充满机遇与挑战的蓝海中,成都睿明智科技有限公司以其独到的眼光和专业的服务,成为了众多商家信赖的合作伙伴。今…

力扣 中等 46.全排列

文章目录 题目介绍题解 题目介绍 题解 代码如下&#xff1a; class Solution {List<List<Integer>> res new ArrayList<>();// 存放符合条件结果的集合List<Integer> path new ArrayList<>();// 用来存放符合条件结果boolean[] used; // 标记…

【D3.js in Action 3 精译_031】3.5.2 DIY实战:在 Observable 平台实现带数据标签的 D3 条形图并改造单元测试模块

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第一部分 D3.js 基础知识 第一章 D3.js 简介&#xff08;已完结&#xff09; 1.1 何为 D3.js&#xff1f;1.2 D3 生态系统——入门须知1.3 数据可视化最佳实践&#xff08;上&#xff09;1.3 数据可…

DAY13

面试遇到的新知识点 char str[10],只有10个字符的空间&#xff0c;但是只能存储9个字符&#xff0c;最后一个字符用来存储终止符\0 strlen只会计算\n,不会计算\0 值传递&#xff1a; void test2(char * str) {str "hello\n"; }int main() {char * str;test2(str);…

红米Turbo 3工程固件预览 修复底层 体验原生态系统 默认开启diag端口

红米Turbo 3机型代码:peridot 国外版本:POCO F6 用于以下型号的小米机型:24069RA21C, 24069PC21G, 24069PC21I。搭载1.5K OLED屏、骁龙8s处理器、5000mAh电池+90W快充、5000万像素主摄。 通过博文了解 1💝💝💝-----此机型工程固件的资源刷写注意事项 2💝💝�…