【鸿蒙开发】性能优化
语言层面的优化
使用明确的数据类型,避免使用模糊的数据类型,例如ESObject。
使用AOT模式
AOT就是提前编译,将字节码提前编译成机器码,这样可以充分优化,从而加快执行速度。
未启用AOT时,一边运行一边进行机器码的生成。
开启AOT后,设备能直接运行已经提前优化过的机器码,大大提高执行速度。
应用启动优化
应用阶段划分:
- 第一阶段:应用进程的创建和初始化
- 第二阶段:App和Ability的初始化
- 第三阶段:Ability生命周期
- 第四阶段:加载绘制首页
每个启动阶段的优化策略:
- 第一阶段优化:设置合适分辨率的应用图标
- 第二阶段优化:减少首页Ability或者Page中import的模块数量,不是首页必须的模块可以使用动态异步加载,如await import(‘Page’)
- 第三阶段优化:Ability生命周期方法中,对于耗时操作进行异步处理
- 第四阶段优化:延迟加载,减少不必要的首页内容。例如使用LazyForEach替换ForEach
LazyForEach替换ForEach
LazyForEach是一种懒加载的模式,在循环绘制组件时能显著提升页面的加载速度。结合cacheCount方法能控制列表的缓存数量,实现更优的滑动体验。
减少丢帧卡顿
- 避免在主线程上执行耗时操作:将耗时操作放在TaskPool或者Worker等后台进程中执行,从而防止主线程负载过高。
- 减少渲染进程的冗余开销:使用资源图代替绘制、合理使用renderGroup、尺寸位置使用整数。
- 减少试图嵌套层级
- 组件复用
- 控制状态变量关联的组件数量
- 在对象上谨慎使用状态变量进行关联
优化案例
组件转场动画推荐使用transition,不推荐使用animateTo方法。
减少animateTo方法的使用数量,一起变更比分开变更更加高效。
多次animateTo时统一更新状态变量,减少多次更新状态变量导致的开销。
使用RenderGroup可以缓存组件及其子组件的绘制,从而降低绘制负载优化渲染性能。适合没状态绑定的不变组件,如果有状态绑定,当状态变化时缓存就是失效了。
使用@Reusable标记复用组件,适用频繁创建和销毁的组件,或反复切换条件渲染的控制分支且控制分支中的组件子树结构相同。
不推荐使用更新单个状态变量的形式控制多个组件的更新(命令式);
推荐使用状态变量和组件一对一绑定的方式,以数据变更驱动组件的刷新(声明式);
合理控制状态变量更新范围,避免关联刷新大量组件。关联变化较大的状态变量可以通过对象组合成一个状态变量,针对渲染成本较高的组件建议使用独立的状态变量进行关联。
理解@Prop和@ObjectLink的区别:@Prop是深拷贝关联,@ObjectLink是浅拷贝关联,因此优先推荐使用@ObjectLink的方式,从而减少系统内存开销。
性能调优工具
Profile调优工具
合理使用布局
组件布局属性(width、height、padding、margin等)大小发生变化会导致受影响的整个组件树重新更新,而非布局属性(Color、BackgroundColor、opacity等)的变化仅影响组件自身。这一点跟Web界面的渲染机制类似,因此我们在更新界面元素时,尽量减少布局属性的变化,防止影响整个组件的重新渲染。如果某些组件需要经常变化,可以将组件置于一个固定布局(这个布局内,布局属性固定)内,将影响固定在这个固定布局内部,从而减少对其他组件的影响。
精简节点数
- 移除冗余节点
- 使用扁平化布局减少节点数
扁平化方法:通过将嵌套结构摊开,减少中间节点,从而提升渲染速度。常用方法有:
- 通过RelativeContainer 相对布局实现扁平化
- 通过锚点定位实现扁平化
- 通过Grid布局实现扁平化
利用布局边界减少计算
对于能够在初期给定宽高的组件,在进行UI描述时尽量给定宽高数值,能够减少由于容器尺寸变化造成的重新测算过程的性能。
合理控制元素的显示与隐藏
首次绘制时,if会根据是否为true决定是否创建组件,而visibility组件无论是否显示都要创建组件。
再次显示时,if由于首次没有创建组件,再次显示时会创建组件,并经过Measure和Layout阶段。而visibility组件已经创建过,只需要经过Measure和Layout阶段。
- 只有初始的一次渲染或者交互次数很少的情况下,建议使用if条件判断来控制元素的显示与隐藏效果,对于内存有较大提升。
- 如果会频繁响应显示与隐藏的交互效果,建议使用切换Visibility.None和Visibility.Visible来控制元素显示与隐藏,提高性能。
相关文章:

【鸿蒙开发】性能优化
语言层面的优化 使用明确的数据类型,避免使用模糊的数据类型,例如ESObject。 使用AOT模式 AOT就是提前编译,将字节码提前编译成机器码,这样可以充分优化,从而加快执行速度。 未启用AOT时,一边运行一边进…...

2025-05-13 学习记录--Python-循环:while循环 + while-else循环 + for循环 + 循环控制
合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。💪🏻 一、循环 ⭐️ (一)、while循环 🍭 初始条件设置 -- 通常是重复执行的 计数器while 条件(判…...

Vue3学习(组合式API——生命周期函数基础)
目录 一、Vue3组合式API中的生命周期函数。 (1)各阶段生命周期涉及函数简单介绍。 <1>创建挂载阶段的生命周期函数。 <2>更新阶段的生命周期函数。 <3>卸载阶段的生命周期函数。 <4>错误处理的生命周期函数。 (2&…...
全面指南:Xinference大模型推理框架的部署与使用
全面指南:Xinference大模型推理框架的部署与使用 Xinference(Xorbits Inference)是一个功能强大的分布式推理框架,专为简化各种AI模型的部署和管理而设计。本文将详细介绍Xinference的核心特性、版本演进,并提供多种部署方式的详细指南,包括本地部署、Docker-Compose部署…...

计量——检验与代理变量
1.非嵌套模型的检验 1Davidson-Mackinnon test 判断哪个模型好 log(y)β0β1x1β2x2β3x3u log(y)β0β1log(x1)β2log(x2)β3log(x3)u 1.对logÿ…...
Cocos Creator 3.8.5 构建依赖环境配置文档
Cocos Creator 3.8.5 构建依赖环境配置文档 文章目录 Cocos Creator 3.8.5 构建依赖环境配置文档✅ 构建依赖汇总表✅ 构建平台配置说明👉 Windows 构建👉 Android 构建 ✅ 推荐构建环境组合(稳定)✅ 常见问题提示 适用于打包 An…...
实验五:以太网UDP全协议栈的实现(通过远程实验系统)
文章目录 FPGA以太网:从ARP到UDP的完整协议栈一、引言二、核心模块详解1. ARP协议处理模块1.1 `arp_cache`:ARP缓存模块1.2 `arp_tx`:ARP请求与应答发送模块1.3 `arp_rx`:ARP接收与解析模块2. MAC层处理模块2.1 `mac_layer`:MAC层顶层模块2.2 `mac_tx_mode`:MAC发送模式选…...

HTML-实战之 百度百科(影视剧介绍)
本系列可作为前端学习系列的笔记,代码的运行环境是在HBuilder中,小编会将代码复制下来,大家复制下来就可以练习了,方便大家学习。 系列文章目录 HTML-1.1 文本字体样式-字体设置、分割线、段落标签、段内回车以及特殊符号 HTML…...
了解光学影像
本文来源 : 腾讯元宝 光学影像是一种通过光学技术捕捉、记录和处理图像的技术,广泛应用于医学、工业、安防、科研等多个领域。以下是关于光学影像的详细介绍: 1. 基本原理 光学影像基于光的传播、反射、折射和散射等物理现象。通过…...

计算机视觉---目标追踪(Object Tracking)概览
一、核心定义与基础概念 1. 目标追踪的定义 定义:在视频序列或连续图像中,对一个或多个感兴趣目标(如人、车辆、物体等)的位置、运动轨迹进行持续估计的过程。核心任务:跨帧关联目标,解决“同一目标在不同…...

Weblogic SSRF漏洞复现(CVE-2014-4210)【vulhub靶场】
漏洞概述: Weblogic中存在一个SSRF漏洞,利用该漏洞可以发送任意HTTP请求,进而攻击内网中redis、fastcgi等脆弱组件。 漏洞形成原因: WebLogic Server 的 UDDI 组件(uddiexplorer.war)中的 SearchPublicR…...
fakeroot 在没有超级用户权限的情况下模拟文件系统的超级用户行为
fakeroot 是一个在 Linux 环境中使用的工具,它允许用户在没有超级用户权限的情况下模拟文件系统的超级用户行为。它是一个在 Linux 环境中广泛使用的工具,通常包含在大多数 Linux 发行版的软件仓库中。 主要功能 模拟 root 权限:fake…...

AI大模型应用:17个实用场景解锁未来
任何新技术的普及都需要经历一段漫长的过程,人工智能大模型也不例外。 尽管某些行业的从业者已经开始将大模型融入日常工作,但其普及程度仍远未达到“人手必备”的地步。 那么,究竟是什么限制了它的广泛应用?普通人如何才能用好…...
激光雷达点云畸变消除:MCU vs CPU 方案详解
在移动机器人、自动驾驶等场景中,激光雷达(LiDAR)用于获取高精度的空间点云数据。然而,当雷达在运动中扫描时,不同点的采集时刻对应的位置不同,就会出现“运动畸变(Motion Distortion࿰…...

java17
1.常见API之BigDecimal 底层存储方式: 2.如何分辨过时代码: 有横线的代码表示该代码已过时 3.正则表达式之字符串匹配 注意:如果X不是单一字符,需要加[]中括号 注意:1.想要表达正则表达式里面的.需要\\. 2.想要表…...
深度学习中的提示词优化:梯度下降全解析
深度学习中的提示词优化:梯度下降全解析 在您的代码中,提示词的更新方向是通过梯度下降算法确定的,这是深度学习中最基本的优化方法。 一、梯度下降与更新方向 1. 核心公式 对于可训练参数 θ \theta θ(这里是提示词嵌入向量),梯度下降的更新公式为:...
多智能体Multi-Agent应用实战与原理分析
一:Agent 与传统工具调用的对比 在当今的开发环境中,Agent 的出现极大地简化了工作流程。其底层主要基于提示词、模型和工具。用户只需向 Agent 输入需求,Agent 便会自动分析需求,并利用工具获取最终答案。而传统方式下,若没有 Agent,我们则需要手动编码来执行工具,还要…...

C++算法(22):二维数组参数传递,从内存模型到高效实践
引言 在C程序设计中,二维数组的参数传递是许多开发者面临的棘手问题。不同于一维数组的相对简单性,二维数组在内存结构、类型系统和参数传递机制上都存在独特特性。本文将深入探讨静态数组、动态数组以及STL容器三种实现方式,通过底层原理分…...
ProceedingJoinPoint的认识
ProceedingJoinPoint 是 Spring AOP(面向切面编程) 中的核心接口,用于在 环绕通知(Around) 中拦截方法调用并控制其执行流程。以下是对其功能和用法的详细解释: 核心作用 拦截目标方法 在方法执行前后插…...
鸿蒙OSUniApp 制作动态加载的瀑布流布局#三方框架 #Uniapp
使用 UniApp 制作动态加载的瀑布流布局 前言 最近在开发一个小程序项目时,遇到了需要实现瀑布流布局的需求。众所周知,瀑布流布局在展示不规则尺寸内容(如图片、商品卡片等)时非常美观和实用。但在实际开发过程中,我…...

Lightpanda开源浏览器:专为 AI 和自动化而设计的无界面浏览器
一、软件介绍 文末提供程序和源码下载 Lightpanda开源浏览器:专为 AI 和自动化而设计的无界面浏览器; Javascript execution Javascript 执行Support of Web APIs (partial, WIP)支持 Web API(部分、WIP)Compatible with Pla…...

技术文档不完善,如何促进知识传承
建立统一的技术文档规范、引入文档自动化工具、将文档写作融入开发流程、建设团队知识共享文化 是促进知识传承的关键策略。在其中,尤应重视建立统一的技术文档规范,通过标准化文档结构、命名、版本管理等方式,提升文档质量和可维护性&#x…...
LLMs之MCP:2025年5月2日,Anthropic 宣布 Claude 重大更新:集成功能上线,研究能力大幅提升
LLMs之MCP:2025年5月2日,Anthropic 宣布 Claude 重大更新:集成功能上线,研究能力大幅提升 导读:2025年5月2日,Anthropic 宣布 Claude 推出 Integrations 集成功能和增强型高级研究功能。Integrations 基于 …...
Linux基础 -- 在内存中使用chroot修复eMMC
Linux基础 – 在内存中使用chroot修复eMMC 概述 本教程将介绍如何在Linux系统中,使用chroot在内存中构建一个临时系统,并在不依赖原有系统的情况下修复eMMC(如/dev/mmcblk2)磁盘。该方法适用于嵌入式系统修复、磁盘清理以及离线…...

Windows平台OpenManus部署及WebUI远程访问实现
前言:继DeepSeek引发行业震动后,Monica.im团队最新推出的Manus AI 产品正席卷科技圈。这款具备自主思维能力的全能型AI代理,不仅能精准解析复杂指令并直接产出成果,更颠覆了传统人机交互模式。尽管目前仍处于封闭测试阶段…...

位运算题目:找到最接近目标值的函数值
文章目录 题目标题和出处难度题目描述要求示例数据范围 解法思路和算法代码复杂度分析 题目 标题和出处 标题:找到最接近目标值的函数值 出处:1521. 找到最接近目标值的函数值 难度 8 级 题目描述 要求 Winston 构造了一个如上所示的函数 func \…...

哲学物理:太极图和莫比乌斯环有什么关系?
太极图 是中国传统文化中的经典符号,由阴阳两部分组成,黑白两色相互环绕,中间有两点表示阴中有阳,阳中有阴。太极图象征着对立统一、相互依存和动态平衡,是道家哲学的核心思想之一。 
机器学习笔记1
一、 机器学习介绍与定义 1. 机器学习定义 机器学习(Machine Learning)本质上就是让计算机自己在数据中学习规律,并根据所得到的规律对未来数据进行预测。 机器学习包括如聚类、分类、决策树、贝叶斯、神经网络、深度学习(Deep…...

JVM中的安全点是什么,作用又是什么?
JVM中的安全点(Safepoint) 是Java虚拟机设计中的一个关键机制,主要用于协调所有线程的执行状态,以便进行全局操作(如垃圾回收、代码反优化等)。它的核心目标是确保在需要暂停所有线程时,每个线程…...

关于github使用总结
文章目录 一、本地使用git(一)创建一个新的本地Git库首先在本地创建一个新的git仓库然后进行一次初始提交提交过后就可以查看提交记录 (二)在本地仓库进行版本恢复先执行 git log 查看项目提交历史使用 git checkout 恢复版本 二、…...