0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

HarmonyOS应用点击响应时延优化指导

HarmonyOS开发者 来源:HarmonyOS开发者威廉希尔官方网站 2025-01-07 09:33 次阅读

HarmonyOS应用生态高速发展的背景下,虽然移动设备的硬件运算性能已经达到了新的高度,但与此同时应用研发者也设计出更加多元化、智能化的产品,展现样式百花齐放,这些产品对高性能的需求与日俱增,加上同类型相近功能的产品互相竞争,用户也会对App产品质量的要求越来越高,对响应速度的要求也愈加严格。本文介绍在HarmonyOS应用中,对应用点击响应时延进行优化的各种方法思路。

优化指导

为了保障应用操作响应及时,看护用户极致流畅体验,开发者需要分析从手势抬手到渲染上屏这段时间应用做了哪些耗时的操作,进而针对性地优化相关逻辑。点击响应优化是指通过分析响应阶段、优化应用性能、加快点击后页面的响应速度,使用户可以得到流畅的操作体验。

6577886c-cc16-11ef-9310-92fbcf53809c.png

图1 点击响应起止点示意图

(一)UI优化

应用开发中的用户界面UI(User Interface)是用户与应用程序交互的关键部分。使用不同类型的布局,能在界面显示上达到预期效果,甚至某些方式能将页面排布得更加美观,但也容易引入不合理的结构问题,如果UI界面中存在过度的布局计算,冗余的元素绘制,将会带来设备资源的大量开销,造成响应性能的衰退。

减少嵌套层级

布局的嵌套层次过深会导致在创建节点及进行布局时耗费更多时间。因此开发者在开发时,应避免冗余的嵌套,并尽量使用扁平化布局来优化嵌套层级。

具体内容见《精简节点数》和《合理使用布局组件》。

减少渲染时间

if/else条件渲染是ArkUI应用开发框架提供的渲染控制能力,可根据应用的不同状态,渲染对应分支下的UI描述。

具体内容见合理使用渲染控制语法。

用renderGroup缓存动效

页面响应时,可能大量使用属性动画和转场动画,当复杂度达到一定程度之后,就有可能出现卡顿的情况。renderGroup是组件通用方法,它代表了渲染绘制的一个组合。

具体原理是在首次绘制组件时,若组件被标记为启用renderGroup状态,将对组件及其子组件进行离屏绘制,将绘制结果合并保存到缓存中。此后当需要重新绘制相同组件时,就会优先使用缓存而不必重新绘制了,从而降低绘制负载,进而加快响应速度。

658eea3e-cc16-11ef-9310-92fbcf53809c.gif

图2 renderGroup使用场景示例

为了能使renderGroup功能生效,有以下限制条件:

组件内容固定不变:组件及其子组件各属性保持固定,不发生变化。如果组件内容不是固定的,也就是说其子组件中存在某些属性变化或者样式变化,此时如果使用renderGroup,那么缓存的利用率将大大下降,并且有可能需要不断执行缓存更新逻辑,在这种情况下,不仅不能优化卡顿效果,甚至还可能使卡顿恶化。例如:文本内容使用双向绑定的动态数据;图片资源使用gif格式;使用video组件播放视频

子组件无动效:由组件统一应用动效,其子组件均无动效。如果子组件上也应用动效,那么子组件相对父组件就不再是静止的,每一帧都有可能需要更新缓存,更新逻辑同样需要消耗系统资源。

LazyForEach懒加载

使用LazyForEach懒加载替换ForEach,避免像ForEach那样一次性初始化和加载所有元素,从而使首帧绘制时创建列表元素时间大大减少,提升响应性能表现。

相关原理及案例参考《优化长列表加载慢丢帧问题》。

动态import

动态import是一种模块加载机制,允许应用程序在运行时按照实际需求去加载相关模块。在某些条件满足时(比如用户交互时,或ABTest分支切换时)再加载特定模块,可以减少初始化import的加载时间和资源消耗,这将有助于提高应用程序的内存性能和响应速度。

与静态import不同,动态import仅在需要时才消耗CPU等资源;相比静态import在编译时就确定了引入的所有模块,动态import还有更佳的语法灵活性,借助这种灵活,能够实现代码和路由级别的粒度分割,优化模块层次的懒加载性能。

具体的使用场景和实现方案参考《动态import》。

(二)并发优化

并发是指多个任务在同一个时间段内同时触发执行,具体逻辑中使用多线程异步执行,与之相对的概念是串行任务,按顺序同步执行。

应用中的并发优化就是在响应用户操作期间,尽可能地让主线程只执行UI绘制相关的任务,而将非UI的耗时任务分配给其他线程或者延迟处理。这样借助多线程的异步威廉希尔官方网站 ,充分利用多核处理器的能力,提高应用程序的并发处理能力,减少用户等待时间,保证用户界面的响应流畅性。

异步任务并发处理

使用多线程并发能力进行开发的过程中,主要实现方式有:

利用TaskPool执行简单并行任务:将一些耗时的操作放入异步任务中处理,避免阻塞主线程,提升应用的响应速度;

利用Worker完成周期类耗时操作:Worker可以空跑在后台等待事件触发,周期触发耗时操作使用Worker,这样可以避免TaskPool频繁拉起影响性能。

二者原理和效果差异可参考《TaskPool和Worker的对比实践》。

使用组件异步加载特性

Image组件支持异步加载特性:当应用在页面上展示一批图片的时候,会先显示空白占位块,当图片在其他线程加载完毕后,再替换占位块。这样图片加载就可以不阻塞页面的显示,给用户带来良好的交互体验。

相应的,如果展示图片数目很少,或加载本地图片,耗时明显较少时,这时建议配置syncLoad属性为true,使图片同步加载,避免特定情况下图片加载出现的闪烁。

(三)代码逻辑优化

代码逻辑的优劣对应用响应速度的影响是比较明显的,特别是点击切换后新页面中的aboutToAppear、onPageShow等生命周期回调,以及点击操作页面中的aboutToDisappear等,需要充分优化代码、减少冗余、避免耗时,提升执行效率。

基于平台SDK的开发框架下,对App生命周期的理解,可以帮助开发人员识别程序在不同阶段的行为,弄清楚不同形态转换时触发的接口性质、各函数被调用的频率,进而挖掘出代码优化的方向。

下图是页面及自定义组件的生命周期流程:

65af1e26-cc16-11ef-9310-92fbcf53809c.png

图3 生命周期流程

通常可以采用的逻辑优化方法有:

选择合适的数据结构 索引存取考虑使用array数组,hash查找考虑使用map,去重逻辑考虑使用set等; 有时开发者使用object变量作为容器去处理map的逻辑,可以考虑使用ArkTS提供的高性能容器类,直接使用HashMap; 遇到纯数值计算的场合,推荐使用TypedArray的数据结构,比如Int8Array、Int32Array、Float32Array、BigInt64Array等。

合理使用缓存 当某些运算结果会反复使用时,以空间换时间,提前缓存以便于下次调用。

注意对象new和delete的频率 new和delete可能会触发内存管理回收,占用CPU资源从而影响界面渲染的能力,需要根据情况调整其频次。尤其在循环代码中,频繁的new、delete更会带来恶化的性能表现,应该尽量将new/delete优化到循环外去处理。

延迟执行资源释放操作 将资源关闭和释放操作放在setTimeout函数中执行,使其延迟到系统相对空闲的时刻进行,可以避免在程序忙碌时段占用关键资源,提升整体性能及响应能力。具体的使用场景和实现方案参考《延迟执行资源释放操作》。

减小拖动识别距离

应用识别拖动手势事件时需要设置合理的拖动距离,设置不合理的拖动距离会导致滑动不跟手、响应时延慢等问题。针对此类问题可以通过设置distance大小来解决。具体的使用场景和实现方案参考《减小拖动识别距离》。

(四)视觉感知优化

上述几节内容,是从减少时延绝对值的角度来提升响应体验,而视觉感知优化则是通过交互设计的优化,提升用户响应速度的感知。

从响应速度的反面角度来讲,应用的卡顿其实就是视觉上出现了不流畅的画面,引起了用户的注意,令其产生了一定的不适感。这也就意味着,在用户操作后,需要第一时间从视觉层面给予反馈响应,从而解决视觉动作带来的不适。

开发者可以在用户的交互动作开始时,从感知角度添加一些动画元素,比如单击效果、转场缩放、加载进度条、共享动画等,这些可以告诉用户目前状态发生了变化,APP在快速地运作着;而动画的背后是:数据的计算,布局的渲染,内容的加载等等,当新界面渲染显示完成,上述动画元素就可通过渐变消失、移出屏外等友好的方式退出视觉区域。

65c5be7e-cc16-11ef-9310-92fbcf53809c.png

图4 应用响应的两个视角

使用这样连贯的感知元素,能提供一种视觉隐喻,将用户的注意力从上个页面平滑地过渡到下个页面;交互动画表现得友好、有趣和实用,则用户在响应侧的体验会更加舒适,从主观上也会认为应用性能好、反应速度快。

具体的使用场景和实现方案参考《转场动画场景案例》和《动画时延场景案例》。

总结

本文探讨了点击响应时延优化的各种方法,为开发者提供重要的指导思路。

在移动应用生态发展的今天,用户对应用响应的体验要求越来越高,开发者对点击响应做性能优化是十分有必要的。

通过文中的UI优化、并发优化、代码逻辑优化、视觉感知优化等常见优化方法,可以有效提高应用的点击响应性能,提升用户体验。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 移动设备
    +关注

    关注

    0

    文章

    504

    浏览量

    54744
  • 应用开发
    +关注

    关注

    0

    文章

    59

    浏览量

    9388
  • HarmonyOS
    +关注

    关注

    79

    文章

    1979

    浏览量

    30280

原文标题:HarmonyOS应用点击响应时延优化指导

文章出处:【微信号:HarmonyOS_Dev,微信公众号:HarmonyOS开发者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    产品响应时

    大家好,我正在做一个光开关的控制,老师要求我对产品的响应时间做一个仿真跟优化,基本工作电路是MCU控制升压芯片的电压,要求对从MCU发出升压命令到升压稳定的这一段时间做一个时间的长度仿真,并对已有电路进行优化,缩短
    发表于 06-16 22:20

    SAR ADC响应时间实现迅速响应、快速控制的方法

    “精确的”测量、“准确的”控制操作和/或快速“响应时间”来优化设计。在这个系列博文中,我们将讨论SAR DAC响应时间和几种实现设计最佳效果的方法。当我们考虑模拟电子元器件时:系统的“高精度”要求转化为你
    发表于 09-12 11:46

    AD9361时响应特性不固定如何优化

    不稳定问题同样存在。 怀疑AD采样之前LMT、LPF等环节群时延响应特性不固定,是否有可优化的参数配置可稳定时(最好保证0.1ns以内)?
    发表于 12-12 07:36

    什么是响应时

    什么是响应时间      响应时间是指液晶显示器各像素点对输入信号反应的速度,即像素由暗转亮或由亮转暗所需要的时间(其原理是在液晶分子内
    发表于 05-24 21:53 5551次阅读

    什么是液晶电视的响应时

    什么是液晶电视的响应时间   响应时间是液晶电视各像素点对输入信号反应的速度,即像素由暗转亮或由亮转暗所需要的时间(其原理是在液晶分子内
    发表于 03-27 13:29 4399次阅读

    测量光耦响应时间的简单电路

    测量光耦响应时间的简单电路
    发表于 06-04 11:53 1988次阅读
    测量光耦<b class='flag-5'>响应时</b>间的简单电路

    SAR ADC 响应时间:迅速响应、快速控制

    快速响应时间来优化设计。在这个系列博文中,我们将讨论SAR DAC响应时间和几种实现设计最佳效果的方法。 当我们考虑模拟电子元器件时: 系统的高精度要求转化为你的模拟块(放大器、基准、传感器等)和混合信号块(ADC,DAC等)所
    发表于 04-18 02:17 1012次阅读
    SAR ADC <b class='flag-5'>响应时</b>间:迅速<b class='flag-5'>响应</b>、快速控制

    什么是单片机的中断响应时

    中断响应时间:从外部中断请求有效(外部中断请求标志置1)到转向中断入口地址所需要的响应时间。每个机器周期的S5P2时刻,INTx引脚的电平被锁存到内部寄存器中,待下一个周期查询。
    发表于 12-19 15:57 1w次阅读
    什么是单片机的中断<b class='flag-5'>响应时</b>间

    面板响应时间有什么影响

    响应时间是一个计算机,显示器成像等多个领域的概念,在网络上,指从空载到负载发生一个步进值的变化时,传感器的响应时间。
    的头像 发表于 01-14 14:56 3984次阅读

    基于异构多核的多类型DAG响应时间分析

    基于异构多核的多类型DAG响应时间分析
    发表于 06-15 14:08 22次下载

    PLC的I/O响应时

    响应时间是指 plc 接收到一个输入信号以后,到输出控制信号所需的时间。当 CPU 接收到对应于输入刷新周期的输入信号时,用于响应的时间取决于扫描周期。
    的头像 发表于 10-05 09:23 4562次阅读
    PLC的I/O<b class='flag-5'>响应时</b>间

    进程响应时间是指什么

    进程响应时间是指从发出请求到收到响应的时间间隔,是衡量系统性能和用户体验的重要指标之一。在计算机系统中,进程是指一个正在运行的程序实例。当用户发出请求,系统会创建一个新的进程来处理该请求。进程响应时
    的头像 发表于 11-17 11:31 1078次阅读

    影响VCO响应时间的因素

    VCO(Voltage-Controlled Oscillator,压控振荡器)的响应时间是一个关键的性能指标,它反映了VCO在接收到控制电压变化后,其输出频率达到稳定状态所需的时间。然而,要详细
    的头像 发表于 08-20 16:07 504次阅读

    驱动钛丝(SMA)的可靠性设计(3)响应时间的设计

    响应时间的设计 前一章我们提到,有很多产品,是需要我们做一些机械结构设计去优化和匹配产品的需求。什么情况下需要做结构设计?如何做结构设计?包括结构设计对钛丝的驱动的可靠性有哪些影响?本节我们就来
    的头像 发表于 11-27 11:58 132次阅读
    驱动钛丝(SMA)的可靠性设计(3)<b class='flag-5'>响应时</b>间的设计

    HarmonyOS应用点击完成时问题定位流程及原理

    HarmonyOS应用开发中,完成时是指用户操作HarmonyOS移动终端时,从输入触控指令到界面完全刷新结束并达到可以阅读的稳定状态所用时间,点击完成时
    的头像 发表于 12-23 11:15 303次阅读
    <b class='flag-5'>HarmonyOS</b>应用<b class='flag-5'>点击</b>完成时<b class='flag-5'>延</b>问题定位流程及原理