ArkUI进阶-性能优化

ArkUI性能优化(1)—优化布局性能 不合理的页面布局(如:嵌套层级过多等)会导致加载慢、掉帧等现象,造成不好影响在布局阶段中,如果视图嵌套层级较深,或者页面节点过多,会导致在Measure和layout过程中,通过遍历测量组件大小和边界的时间过长。所以布局性能优化,可以从减少节点数或者优化布局测算时间方面来考虑。 阅读详情

布局性能优化

基本布局流程

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

在这里插入图片描述

例如上述布局:

  1. 应用会根据我们的代码,创建对应的node节点树,其中,Custom Node表示自定义组件节点,Frame Node节点表示系统组件节点。
  2. 在这个过程中,UI线程会对每个元素进行测算measure和布局lauout,来确定具体的位置和大小,measure阶段负责确定组件的测量宽高,也就是该组件元素占用的屏幕大小,layout阶段会确定最终宽高和四个顶点的位置。
  3. 根据页面节点树,生成当前界面描述数据结构–渲染树。渲染树由RenderNode渲染节点组成,描述了具体元素在屏幕上的布局信息,包含大小、位置以及一些其他属性。
  4. 渲染服务的渲染线程会根据渲染树的信息执行相应的绘制工作。

在布局阶段中,如果视图嵌套层级较深,或者页面节点过多,会导致在Measure和layout过程中,通过遍历测量组件大小和边界的时间过长。所以布局性能优化,可以从减少节点数或者优化布局测算时间方面来考虑。

精简节点数

首先我们先看一下相同数量节点嵌套和平铺的情况下,对性能的影响,通过使用IDE的profiler工具进行抓取,可以得知:
在这里插入图片描述

从上边我们可以看出,在相同组件、相同数量的情况下,嵌套和平铺对性能的影响差距不是很大,主要影响性能的还是节点数量,所以我们在进行布局的时候,应该尽量减少参与布局的节点数,来减少布局的性能消耗。

主要有两个优化方向:

  1. 移除冗余节点。
  2. 使用扁平化布局,减少层级嵌套,如RelativeContainer、Grid等。

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

在ArkUI中,控制元素隐藏和显示,一般有两种方式,使用条件语句控制,或者使用visibility属性来控制。

我们来对比使用条件渲染语句和使用visibility属性来控制时,measure和layout耗时区别:

首次渲染:

在这里插入图片描述
我们可以看到,使用条件渲染语句时,当条件为false时,对应组件不参与measure和layout阶段。使用visibility属性进行控制的时候,无论组件是否显示,都会参与measure阶段,如果visibility为none,那么组件不参与layout阶段。

切换显示

在这里插入图片描述
我们可以看到,切换显示状态的时候,使用条件渲染语句,会根据条件来判断组件是否创建,切换过程会出现较大的性能消耗,且每次切换消耗相同。使用visibility的时候,性能消耗要小很多。

综上所述,在控制组件的显示与隐藏时,我们可以遵循以下原则:

  • 对性能要求较高,且会频繁切换显示与隐藏的情况下,使用visibility属性进行控制。
  • 组件创建性能消耗较大,且初始状态下不可见,并且不会频繁切换的情况下,使用条件渲染语句进行控制。

给定组件的宽高

在ArkUI中,我们给组件设置宽高的方式,一般分为三种:设置固定值、百分比宽高、不设置宽高。

我们对比三种情况下的measure和layout的耗时

在这里插入图片描述
初次加载时,三种情况消耗差距不大,原因是初次加载的时候,所有的组件都参与了measure和layout过程。

在这里插入图片描述
在重绘的过程中,我们可以看到,给定宽高的组件,所消耗的性能明显小于其他两种方式,原因是修改宽高触发重绘的情况下, 给定内部组件宽高时,内部组件可以重用初次measure和layout数据,不设置宽高和百分比宽高的,由于父容器宽高发生了变化,所以需要参与measure和layout过程。

使用推荐的布局组件

越是复杂的布局,measure和layout的过程越是耗时,比如grid组件就会比row组件耗时,但是如果使用grid组件,可以明显减少页面的节点数量或者是嵌套层级数量,那么此时所节省的性能会明显优于grid组件多消耗的性能。

长列表加载性能优化

长列表优化概述

针对长列表加载场景,对列表渲染速度、页面滑动帧率、内存占用大小等方面进行优化,主要有以下几个方面

  • 懒加载:提供列表数据按需加载的能力,解决一次性加载列表项耗时过长,占用过多资源的问题,提升页面加载速度。
  • 缓存列表项:提供屏幕可视区域外列表缓存长度的自定义调节能力,配合懒加载使用,缓存页面数据,预加载页面外列表项,提升列表滑动体验。
  • 组件复用:提供可复用组件对象的缓存资源池,通过重复使用已经创建并缓存的组件对象,降低相同组件短时间内频繁创建和销毁的消耗,提升渲染效率。
  • 布局优化:使用扁平布局,减少视图嵌套层级和节点数,提升渲染效率。

懒加载

当列表数据量较小且布局较为简单的时候,我们可以使用ForEach渲染语句。
当列表数据量较大时,使用lazyForEach渲染语句实现懒加载的效果。

使用lazyForEach渲染语句时,最小可以做到仅加载渲染屏幕当前显示的列表项。

缓存列表项

我们使用了lazyForEach懒加载时,默认只会渲染当前屏幕显示的列表项,那么当我们快速滑动的时候,就会出现白块的现象。

lazyForEach可以通过设置cachedCount来缓存或预加载一定数量的列表项,比如当前屏幕最大可以显示5条,cachedCount为3,那么此时挂载在组件树上的列表项,最多可以是11条。

组件复用

  1. 在item列表项的自定义组件头部添加@Reusable装饰器,标识该组件拥有复用的能力。
  2. 实现可复用自定义组件的生命周期aboutToReuse方法,也就是我们的数据填充逻辑。
  3. 在ListItem组件上设置可复用组件的ReuseId。
移动客户端开发的进阶之路:技术深度、鸿蒙生态与实战能力 广东南方网络信息科技有限公司作为立足南方的科技企业,其招聘的移动客户端开发工程师岗位职责与要求,反映了当前行业对移动端人才需求的趋势,特别是对鸿蒙生态、跨平台开发以及高性能应用的重视。对于求职者而言,深入理解岗位要求的技术点,结合自身项目经验进行针对性准备(特别是鸿蒙ArkTS/ArkUI和性能优化经验),并在面试中展现出解决问题的思路和学习能力,是成功的关键。当你在开发过程中遇到一个从未见过的技术难题(例如,一个冷门的第三方库Bug,或鸿蒙新特性的适配问题),且官方文档和社区资源有限,你会如何应对? 阅读详情

相关推荐

什么是Merkle树?用“文件柜”类比理解区块链的核心技术

Merkle树是一种用于区块链的数据结构,像一个高效的“文件柜”,用于存储和验证大量交易数据。比特币通过Merkle树将交易哈希组织成树状结构,层层汇总,最终生成一个唯一的根哈希,存储在区块头中。这种设计大幅减少数据存储和验证成本,支持快速校验交易的完整性和存在性。Merkle树通过密码学保证数据不可篡改,广泛应用于比特币、区块链及其他分布式系统。它的优势在于高效、轻量和安全,尤其适合轻节点验证和数据同步。理解Merkle树就像掌握区块链的“索引秘籍”,是Web3世界的关键技术。

在路上的专栏 1192

OpenHarmony 3.2 Release特性更新简析

OpenHarmony 3.2 Release特性更新简析

weixin_69135651的博客 1258

PX4固件下VTOL固定翼的3种起飞方式对比:手抛vs弹射vs跑道

本文深度解析PX4固件下VTOL固定翼的三种起飞方式:手抛、弹射与跑道起飞,对比其技术差异与适用场景。通过详细的参数配置和工程实践指南,帮助开发者优化起飞性能,提升无人机在不同环境下的适应性和可靠性。文章特别针对PX4飞控系统的最新特性进行了技术探讨。

weixin_30296405的博客 87

要想用的流畅,性能怎能不优化?ArkUI性能优化

ArkUI 性能优化至关重要。通过合理的布局设计、减少不必要的组件渲染等方法,可以显著提升应用的响应速度和流畅度。本文深入探讨 ArkUI 的性能优化策略,为开发者提供实用的指导,助力打造高性能的 ArkUI 应用。

2301_79965256的博客 2285

从逻辑门到RISC-V指令:ALU设计实战与Verilog实现

本文详细介绍了从逻辑门到RISC-V指令集的ALU设计实战与Verilog实现方法。通过构建1位ALU并扩展至64位,深入解析了RISC-V指令集的算术逻辑单元实现技巧,包括加法器设计、零标志检测和溢出检测等关键功能。文章还分享了Verilog代码优化、流水线设计和常见问题调试的实用经验,为开发者提供了一套完整的ALU设计解决方案。

weixin_29214335的博客 185

10X Visium空间转录组学入门:从芯片结构到数据分析全流程解析(附避坑指南)

本文全面解析10X Visium空间转录组学技术,从芯片物理结构、探针化学原理到湿实验全流程操作与避坑指南,并详细介绍了从FASTQ数据到空间可视化的核心分析流程。文章旨在帮助科研人员跨越从理论到实操的鸿沟,掌握从样本准备、文库构建到使用Space Ranger和Seurat进行数据分析与可视化的完整路径,为组织生物学研究提供清晰的实践指引。

weixin_29306011的博客 163

HarmonyOS学习笔记——ArkUI进阶

懒加载:提供列表数据按需加载能力,解决一次性加载长列表数据耗时长、占用过多资源的问题,可以提升页面响应速度。缓存列表项:提供屏幕可视区域外列表项长度的自定义调节能力,配合懒加载设置可缓存列表项参数,通过预加载数据提升列表滑动体验。组件复用:提供可复用组件对象的缓存资源池,通过重复使用已经创建过并缓存的组件对象,降低相同组件短时间内频繁创建和销毁的开销,提升组件渲染效率布局优化:使用扁平化布局方案,减少视图嵌套层级和组件数,避免过度绘制,提升页面渲染效率。

weixin_51323227的博客 1609

关于Arduino中的常用函数

一、I/O函数 二、时间函数 三、数学函数 abs 返回其参数的无符号值 【abs(12)返回12,abs(-12)也返回12】 constrain 限制一个数字以阻止它超出范围。第一个参数是被限制的数字,第二个参数是范围区间的开始,第三个参数是允许的数字范围区间的结尾。 【constrain(8,1,10)返回8,constrain(11,1,10)返回10,constrain(0,1,10)返回1】 map 将一个范围内的数字映射到另一个范围。第一个参数是要映射到数字,第二个和第三个参数是from范围(

TREE的博客 7323

OpenHarmony实战开发-合理选择条件渲染和显隐控制。

开发者可以通过条件渲染或显隐控制两种方式来实现组件在显示和隐藏间的切换。本文从两者原理机制的区别出发,对二者适用场景分别进行说明,实现相应适用场景的示例并给出性能对比数据。

m0_70749039的博客 2567

Transformer在CV里太耗算力?手把手拆解Restormer的MDTA与GDFN模块

本文深度解析了CVPR2022最佳论文提名作品Restormer的创新模块MDTA与GDFN,有效解决了Transformer在计算机视觉领域的高计算复杂度问题。通过通道注意力降维和门控前馈网络设计,Restormer在图像恢复重建任务中显著降低计算量,同时保持高性能,为实时图像处理提供了可行方案。

weixin_30258901的博客 445

Cadence仿真MOS电容C-V曲线:从电路图到参数扫描的完整流程

本文详细介绍了使用Cadence Virtuoso仿真MOS电容C-V曲线的完整流程,从电路图绘制到参数扫描,再到结果分析与问题排查。通过实际案例和实用技巧,帮助工程师快速掌握MOS电容特性分析的关键步骤,提升集成电路设计效率。

weixin_29271263的博客 431

《ArkUI实战》之渲染控制语法

ArkUI开发框架是一套构建 HarmonyOS / OpenHarmony 应用界面的声明式UI开发框架,它支持程序使用if/else条件渲染,ForEach循环渲染以及懒加载渲染。本节笔者介绍一下这三种渲染方式的使用。

m0_71263309的博客 1424

Calibre提参实战:如何用hcell和xcell文件精准屏蔽模块(附避坑指南)

本文详细解析了Calibre提参过程中hcell和xcell文件的应用技巧,帮助工程师精准屏蔽模块以优化寄生参数提取。通过对比hcell与xcell的核心差异、图形界面与命令行操作指南,以及常见问题排查方法,提升芯片后端设计效率。附避坑指南,解决EETOP论坛热议的模块丢失问题。

weixin_26795617的博客 440

鸿蒙中级课程笔记3—ArkUI进阶5—ArkUI性能优化实践(布局性能优化)

使用更高级的布局使页面扁平化,如ReleativeContainer、Grid布局等。

BlackWolfSky的博客 375

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

鸿蒙中级课程笔记3—ArkUI进阶6—ArkUI性能优化实践(长列表加载性能优化)

使用LazyForEach懒加载这项技术后,相比ForEach这种加载方式,在列表数据量较小(100条内)且数据一次性全量加载不是性能瓶颈时,两者各项性能指标差异不大。但当列表数据较长特别是达到10000条数据量后,ForEach的上述4项性能指标会有“指数级别”的显著劣化,滑动会出现明显的卡顿,甚至会出现应用crash等现象;而LazyForEach因为采用了懒加载技术能明显减少首屏完全显示所用时间,降低应用的独占内存,提高页面滑动帧率,带来更好的性能。

BlackWolfSky的博客 890

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

鸿蒙ArkUI进阶:声明式开发到跨端实战

鸿蒙ArkUI框架进阶:声明式开发与跨端实战 本文深入解析鸿蒙ArkUI 5.0框架的核心特性和开发技巧。首先介绍声明式UI开发范式,通过状态驱动视图实现高效UI更新,对比传统命令式开发可减少30%代码量。重点讲解跨设备自适应布局方案,包括12列栅格系统、断点响应和动态资源加载。进阶部分涵盖五种状态管理方案、Flex/相对布局等高级UI技术,以及属性动画和共享元素转场等动效实现。最后通过购物车状态同步等案例,展示如何运用这些技术构建高性能、跨设备的HarmonyOS应用。

2502_93036221的博客 1080

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

[HarmonyOSNext鸿蒙开发]7.ArkUI进阶:@BuilderParam装饰器的核心用法与实战解析

定位:用于装饰指向@Builder函数的变量,相当于UI元素的占位符(类似Vue的slot)解决的问题:避免自定义组件功能过度耦合,实现功能逻辑的动态注入兼容性:支持ArkTS卡片(API 9+)、元服务(API 11+)掌握@BuilderParam装饰器,意味着获得了组件动态化的金钥匙。3大核心使用模式2种作用域控制技巧5类常见问题解决方案开发者能够构建出高内聚、低耦合的鸿蒙组件体系。建议结合官方示例工程,在实践中深化对this指向、类型校验等关键概念的理解。

qq_39277137的博客 1465

鸿蒙ArkUI背景图片进阶技巧:从静态布局到交互动效全解析

本文深入解析鸿蒙ArkUI背景图片的进阶技巧,从静态布局到交互动效全流程。通过ArkTS语言实现动态响应、视差滚动和粒子分解等高级效果,特别适合电商、社交类应用的沉浸式界面开发。涵盖精准定位、智能尺寸适配、性能优化及创意交互案例,助力开发者提升用户体验。

weixin_29212429的博客 214

鸿蒙ArkUI圆角设计避坑指南:为什么你的borderRadius总是不生效?

本文深入解析鸿蒙ArkUI开发中borderRadius属性失效的常见原因与解决方案。针对组件圆角不生效的问题,从View嵌套裁剪、单位混淆、与边框阴影叠加三大核心场景剖析底层原理,并提供实战代码示例与调试技巧,帮助开发者彻底规避圆角设计陷阱,实现精准的界面效果。

weixin_29290947的博客 447

鸿蒙应用开发深度解析:ArkUI父子组件通信的八种核心模式与实践指南

/ 定义事件类型detail: {// 子组件触发@Componentbuild() {detail: {value,}))})渲染性能:组件更新速度提升40%内存占用:减少25%的冗余状态代码维护性:降低60%的耦合代码小型应用:Props + 事件回调中型应用:状态提升 + Provider模式大型应用:全局状态管理 + 事件总线随着鸿蒙ArkUI的持续演进,组件通信将更加智能化。官方状态管理库的更新新的装饰器语法提案跨设备组件通信方案。

Yue 1133

HarmonyOS ArkUI声明式UI开发实战技巧

声明式UI作为现代前端开发的核心范式,通过描述UI的最终状态而非具体操作步骤,大幅提升了开发效率与代码可维护性。其原理基于响应式编程模型,当数据状态变化时自动触发UI更新。在HarmonyOS生态中,ArkUI框架将这一理念与原生性能完美结合,特别适合开发高性能的跨设备应用。通过组件化拆分、条件渲染优化和状态管理机制,开发者可以构建出模块清晰、响应迅速的界面。本文以电商应用为例,详细解析如何运用ArkUI的@Component装饰器、@Link双向绑定等特性,实现复杂页面的高效开发,其中模块化拆分方案可减少

weixin_33801856的博客 476

OpenHarmony 进阶 UI 组件、自定义组件实战与交互开发

ArkUI 支持将重复使用的 UI 模块封装为自定义组件,遵循@Component装饰器定义,可传入参数、绑定状态,大幅简化代码。封装通用信息卡片,可在列表、首页、个人中心重复调用。// 自定义卡片组件@Component// 外部传入参数build() {// 页面入口,调用自定义组件@Entry@Componentbuild() {// 多次复用自定义卡片CardItem({ title: "功能一", desc: "OpenHarmony 分布式能力介绍" })

Helen_cai的博客 323

HarmonyOS6 粒子效果:用 ArkUI 在 HarmonyOS6 PC 上实现烟花绽放

每个粒子需要哪些属性?id: number // 唯一标识,用于后续查找和清理tx: number // translate X 偏移量ty: number // translate Y 偏移量scale: number // 缩放比例opacity: number // 透明度color: string // 颜色size: number // 尺寸tx/ty:粒子最终要飞到的位置偏移。初始都是 0(在中心点),爆发后通过极坐标计算得到一个目标偏移。scale。

qq_37048082的博客 1269

HarmonyOS应用开发实战:小事记 - NavPathStack 进阶:路由守卫、参数传递、页面返回数据

本文深入解析了 HarmonyOS Navigation 组件中 NavPathStack 的高级用法,涵盖六大核心内容:1. 基本路由操作(压栈/出栈/替换);2. 参数传递与接收;3. 页面返回数据交互;4. 路由守卫实现(拦截返回/自定义守卫);5. 路由栈状态监听;6. 常见问题解决方案。文章通过代码示例展示了关键功能实现,如携带参数跳转、监听返回数据、拦截未保存返回等场景,并提供了性能优化建议和状态管理方案,帮助开发者构建更健壮的路由系统。

b13053810049的博客 703

HarmonyOS 6.0+ PC端系统级桌面插件开发实战:ArkUI Widget进阶与系统交互深度集成

1. 核心需求梳理:基于PC端用户(尤其是开发、办公人群)对系统资源监控的核心诉求,明确插件核心功能为「实时数据采集」「多维度可视化展示」「异常状态预警」「快速操作跳转」四大模块。2. 功能边界定义:明确插件不涉及深层系统资源调控(如强制关闭进程),仅提供监控与跳转能力;支持小/中/大三种尺寸适配,不同尺寸展示不同详细程度的数据(小尺寸:核心资源概览;中尺寸:详细数据+趋势图;大尺寸:全维度数据+操作入口)。

qq_58538927的博客 1154

HarmonyOS-中级(二)

HarmonyOS中级(二),ArkTS进阶

DC_BLOG的博客 598
上一篇: 鸿蒙UIAbility组件进阶
下一篇: ArkUI-状态管理-@State、@Porp、@Link
gitzzp
博客等级 码龄11年 307粉丝 60原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值