鸿蒙面试 --- 性能优化(精简版)

一、性能优化的三个方面

  • 感知流畅:通过合理运用动画提升用户对应用操作的感知流畅度,同时避免因动画滥用导致性能下降。涵盖视觉感知优化、转场场景动效感知流畅(如出现 / 消失转场、导航转场、模态转场、共享元素转场等),以及合理设置动画时长、使用连贯动画等要点。
  • 渲染性能:从控制渲染范围、减少布局节点、优化组件绘制、控制状态刷新、优化动画帧率等方面着手,旨在缩短页面加载和布局渲染时长,提升应用的渲染效率,减少内存占用和卡顿现象。
  • 运行性能:涉及使用并发能力、提前加载资源、提高运行效率、减少耗时操作、延时触发操作等,以充分利用系统资源,减少用户等待时间,提升应用整体运行的流畅性和效率。

二、各方面具体重点内容

(一)感知流畅

  • 视觉感知优化:在用户操作时及时给予视觉反馈响应,如添加单击效果、转场缩放、加载进度条等动画元素,操作完成后动画以渐变消失等友好方式退出。
  • 转场场景动效
    • 出现 / 消失转场:对新增、消失控件实现动画效果。
    • 导航转场:对应页面路由切换的动画效果。
    • 模态转场:新界面覆盖旧界面的动画效果。
    • 共享元素转场:对相同或相似元素做过渡动画。
    • 页面转场动画(不推荐):可自定义但推荐使用导航转场和模态转场。
    • 旋转屏动画增强:配置渐隐和渐现转场效果。
  • 动画时长设置:合理设置 Tabs 组件、Swiper 组件、页面间转场等的动画时长,避免过长时延影响用户点击完成时延。
  • 连贯动画使用:通过多种连贯动画让用户感受到应用快速响应。
(二)渲染性能
  • 控制渲染范围
    • 合理控制元素显示与隐藏:运用 Visibility.None、if 条件判断等手段。
    • 懒加载:如 LazyForEach 技术,按需求加载数据或资源,可设置 cachedCount 缓存数据,适用于长列表等场景。
    • 组件复用:针对不同复用类型(标准型、有限变化型、组合型、全局型、嵌套型)采用相应复用思路,减少创建新节点。
    • 分帧渲染:应对页面内复杂列表结构,减轻组件负载。
  • 减少布局节点
    • 优先使用 @Builder 方法:在不涉及状态变量和自定义生命周期时替换自定义组件。
    • 合理使用布局容器组件:选用合适布局,减少使用性能差的布局组件。
    • 精简节点数:移除冗余节点、使用扁平化布局,避免给自定义组件添加属性产生多余节点,减少无用容器组件嵌套。
  • 优化组件绘制
    • 避免高耗时操作:不在自定义组件生命周期内执行高耗时操作,如 aboutToAppear () 函数中。
    • 按需注册组件属性:避免单个组件设置大量属性。
    • 减少布局计算:非自适应情况下给定组件宽高数值。
  • 控制状态刷新
    • 避免不必要的状态变量使用:合理使用状态变量,用临时变量替换可减少渲染。
    • 最小化状态共享范围:按需求选择合适装饰器实现最小化共享范围。
    • 减少参数层层传递:避免状态在层级相差较大的组件间层层传递。
    • 精细化拆分复杂状态:避免将过多状态存入 AppStorage。
    • 集中化状态修改逻辑:将相同的状态修改逻辑集中到单个函数。
    • 精准控制组件刷新:使用 @Watch 装饰器监听数据源或通过 EventHub、Emitter 实现事件发布订阅。
  • 优化动画帧率
    • 使用系统动画接口:可提供流畅动画效果,减少丢帧率。
    • 使用图形变换属性变化组件:减少布局计算和重绘操作。
    • 合理使用 animateTo:参数相同时放在同一动画闭包执行,多次动画操作时统一更新状态变量。
    • 使用 renderGroup 缓存动效:解决大量应用动效组件的卡顿问题。
(三)运行性能
  • 使用并发能力
    • 多线程能力:将高耗时任务用多线程处理或改为异步并发、延后处理,如 ArkTS 提供的 TaskPool 与 Worker 方案。
    • 异步能力:利用 Promise 和 async/await 实现异步并发,适用于单次 I/O 任务。
    • 多线程间通信:注意对象跨线程传递时的序列化 / 反序列化问题,可使用 Sendable 对象实现引用传递。
  • 提前加载资源
    • 网络请求优化:提前发起网络请求,减少因网络请求时长导致的页面跳转时延。
    • Web 组件相关:预连接、预加载、预渲染 Web 组件,提升页面启动和响应速度。
    • 预下载优化 Image 白块:提前缓存网络图片,减少白块出现时长。
  • 提高运行效率
    • 变量声明:初期不变的变量用 const 声明,明确 number 类型初始化值,非跨语言场景少用 ESObject。
    • 属性访问:将全局变量存储为局部变量减少属性查找,选取合适的类属性访问修饰符。
    • 数值计算与数据结构:纯数值计算用 TypedArray,选取合适数据结构如 Record、HashMap 提高效率。
    • 减少嵌套导出 / 导入方式:按需引用变量,减少全量导出 / 引用,降低依赖模块解析耗时。
  • 减少耗时操作
    • 避免主线程冗余操作:避免不必要、重复且无实质贡献的操作。
    • 避免高频回调执行耗时操作:防止在高频回调接口中执行耗时操作。
    • 避免使用耗时接口:合理使用系统提供的接口,如数据库调用采用异步接口。
  • 延时触发操作
    • 动态加载与延迟加载:通过动态 import 或 Lazy-Import 在需要时加载模块,节省冷启动资源。
    • 延迟执行资源释放操作:将资源关闭和释放操作放在 setTimeout 函数中延迟执行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/888100.shtml

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

相关文章

idea2024加载flowable6.8.1.36遇到的问题-idea启动flowable问题flowable源码启动问题

代码下载地址: https://gitee.com/hanpenghu_admin_admin/flowable6.8.1.git 1.首先是通过顶层目录maven clean install 发现很多子模块并不会install本地mavenStore库,这导致了,一堆相互依赖的模块报错找不到,所以需要根据报错…

web安全从0到1:burp-suite3

声明! 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&a…

深度学习模型: BERT(Bidirectional Encoder Representations from Transformers)详解

一、引言 自然语言处理(NLP)领域在过去几十年取得了显著的进展。从早期基于规则的方法到统计机器学习方法,再到如今基于深度学习的模型,NLP 不断向着更高的准确性和效率迈进。BERT 的出现为 NLP 带来了新的突破,它能够…

ESP8266 (ESP-01S)烧录固件 和 了解与单片机通信必需的AT指令

ESP8266(ESP-01s)烧录固件 工具: 需要安装的原装出厂固件库: ESP8266 --接线-- VCC 3.3(外接开发板) GND GND(外接开发板) IO0 GND(外接…

<三>51单片机PWM开发SG90和超声测距

目录 1,PWM开发SG90 1.1简介 1.2控制舵机 1.3编程实现 2,超声测距 2.1简介 2.2,超声波测距代码实现 1,PWM开发SG90 1.1简介 PWM,英文名Pulse Width Modulation,是脉冲宽度调制缩写,它是通过对一系列脉冲的宽度进 行调制,等…

【Python爬虫五十个小案例】爬取猫眼电影Top100

博客主页:小馒头学python 本文专栏: Python爬虫五十个小案例 专栏简介:分享五十个Python爬虫小案例 🐍引言 猫眼电影是国内知名的电影票务与资讯平台,其中Top100榜单是影迷和电影产业观察者关注的重点。通过爬取猫眼电影Top10…

springboot信息化在线教学平台的设计与实现(代码+数据库+LW)

摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了信息化在线教学平台的开发全过程。通过分析信息化在线教学平台管理的不足,创建了一个计算机管理信息化在线教学平台的方案。文章介绍了信息化在线教…

Hadoop批量计算实验

参考: Hadoop(一)之实验一CentOS7配置Hadoop系统:配置CentOS和下载安装包_基于虚拟机cents7搭建hadoop实验目的-CSDN博客 --------------------------------------------------------- 一、安装Vmware 二、创建虚拟机 1.安装centos7 ①打开VMware,点击新建虚拟机。 …

Flink四大基石之Time (时间语义) 的使用详解

目录 一、引言 二、Time 的分类及 EventTime 的重要性 Time 分类详述 EventTime 重要性凸显 三、Watermark 机制详解 核心原理 Watermark能解决什么问题,如何解决的? Watermark图解原理 举例 总结 多并行度的水印触发 Watermark代码演示 需求 代码演示&#xff…

Ubuntu 操作系统

一、简介 Ubuntu 是一个基于 Linux 的开源操作系统,它由 Canonical Ltd. 公司维护和资助。Ubuntu 以其易用性、强大的社区支持和定期的安全更新而闻名,一个一桌面应用为主的操作系统。 二、用户使用 1、常规用户的登陆方式 在登录时一般使用普通用户&…

Apifox Echo - 简单而强大的API测试服务

什么是Apifox Echo? Apifox Echo 是由 Apifox 官方推出的一个专业的接口请求和返回数据服务平台。它的主要目的是帮助开发人员和测试人员更好地学习和测试API接口。 核心特点 简单易用 提供简洁的HTTP请求和响应服务操作界面直观,上手容易服务地址统一: https://echo.api…

Linux笔记---进程:进程等待

1. 进程等待的概念 进程等待是指父进程通过系统调用wait或waitpid来对子进程进行状态检测与回收的功能。 当子进程退出时,如果父进程不读取子进程的退出状态,子进程就会成为僵尸进程,造成内存泄漏的问题。因此,父进程需要调用wa…

常见靶场的搭建

漏洞靶场 渗透测试(漏洞挖掘)切忌纸上谈兵,学习渗透测试(漏洞挖掘)知识的过程中,我们通常需要一个包含漏洞的测试环境来进行训练。而在非授权情况下,对于网站进行渗透测试攻击,是触及…

AtomicIntegerFieldUpdater能否降低内存

1. 代码如下: import java.util.LinkedList; import java.util.List; import java.util.concurrent.atomic.AtomicInteger;public class AtomicIntegerTest {final AtomicInteger startPosition new AtomicInteger(0);final AtomicInteger wrotePosition new Atom…

从零开始:使用Vite和pnpm搭建Vue3项目实战指南

目录 一、Node.js的下载和安装 1、打开Node.js官网(Node.js — Run JavaScript Everywhere) 2、点击下载按钮,下载完成后,打开文件,一直按Next按钮,直到 3、下载完成后,找到文件所在位置,然…

立创庐山派 K230 RTSP 推流

立创庐山派使用的是K230芯片,按照教程刷了canmv固件,下载canmv ide,使用嘉楠社区的rtsp和wlan例程,修改成连接wifi以及RTSP推流例程 # Description: This example demonstrates how to stream video and audio to the network us…

数据湖的概念(包含数据中台、数据湖、数据仓库、数据集市的区别)--了解数据湖,这一篇就够了

文章目录 一、数据湖概念1、企业对数据的困扰2、什么是数据湖3、数据中台、数据湖、数据仓库、数据集市的区别 网上看了好多有关数据湖的帖子,还有数据中台、数据湖、数据仓库、数据集市的区别的帖子,发现帖子写的都很多,而且专业名词很多&am…

springboot kafka在kafka server AUTH变动后consumer自动销毁

前言 笔者使用了kafka用来传输数据,笔者在今年10月写了文章,怎么使用配置化实现kafka的装载:springboot kafka多数据源,通过配置动态加载发送者和消费者-CSDN博客 不过在实际运行中,kafka broker是加密的&#xff0c…

在Windows下编译支持https的wsdl2h

下载源码 在官网下载源码 安装Openssl 下载OpenSSL并安装,安装完成后需要将OpenSSL的路径添加到环境变量中 配置VS 1、打开工程 2、因为前面安装的OpenSLL是64位的,因此需要创建一个X64的配置 打开配置管理器,然后选择新建&#xff0…

【Webgl_glslThreejs】制作流水效果/毛玻璃效果材质

效果预览 shadertory源码 source: https://www.shadertoy.com/view/lldyDs 材质代码 import { DoubleSide, ShaderChunk, ShaderMaterial, TextureLoader } from "three"; /** * * source https://www.shadertoy.com/view/lldyDs */export default fu…