码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 深入鸿蒙开发-OpenHarmony高性能开发的三位一体


    OpenHarmony LazyForEach ArkUI 高性能 OpenHarmony应用性能优化概览 核心思想

    我们相信时间以线性存在,它持续不变地进行,直到无穷无尽。
    但过去、现在和未来的不同,昨日、今日和明日可能不是连贯的,而是互相组合的永无止尽的循环。
    世间万物皆有关联。
    
    • 1
    • 2
    • 3

    高性能开发是为了增强用户使用app的体验。从用户角度看,主要由3个方面共同决定。

    • 南向能力:硬件的性能。一路向南,有芯片能力,底层驱动能力,硬件设备能力等。
    • 北向能力:操作系统本身的性能。一路向北,有内核层能力、系统服务层能力、框架层能力等。
    • 应用开发:开发者编写应用的性能。

    一般开发者只能自上而下进行整改,即通过改善应用代码来增强用户体验。如果发现问题无法解决,可以反馈至系统层。同理,框架层无法解决,可以反馈至硬件层。如果硬件层无法解决,瓶颈就在基础物理研究了。

    我们这里能做的是应用层面提高应用性能。

    可以思考的维度

    对于应用优化,我们可以从不同维度分析,拆解性能优化项。比如从编译、构建、启动、运行等阶段分析,也可以从开发语言合理使用、组件正确使用、性能工具调优等角度分析。本文尝试另用一种抽象的角度归类性能优化。

    本文思考的维度

    我们的世界被两大维度限定:时间和空间。

    同样,计算机的组成也离不开这两个法则。因此,我们可以从这三个维度归类性能优化项:时间、空间、以及围绕它们的做出的权衡。

    时间优化空间优化转移
    思想减少不必要的时间浪费减少不必要的空间浪费-

    前两者很容易理解,我们可以理解成没有负面影响的编码优化🧑‍💻,是大部分情况下推荐的用法。

    关键是第三点,你可能有疑问🤔️,有了时间和空间维度不是已经覆盖了全部吗,为什么还有第三维度。要理解这个问题可以从对太极☯️的理解开始。太极看上去只有阴和阳,但实际它们之间的曲线,以及两个互换位置的点也表达了一个交融状态,这就是隐藏的第三维度。实际上这个第三维度才是太极思想的精华。达到一种你中有我,我中有你的状态。

    能量不会凭空消失,只会转移。

    同理,问题也不会消失但可以转移。

    我在一些性能优化的文章中常常会看到一些“偷梁换柱”的情况:比如说在当前函数从系统角度简化了一些逻辑,但这些逻辑从业务角度看又是必须的,那么这些事情不在这个函数做,实际上也需要在别的函数里做。从单看这个函数来说,确实是优化了,似乎是转移了问题🙋。

    但反过来说,这种“偷梁换柱”的行为在某种特定场景是完全行得通的,比如对于一些可以延期执行的、不那么必要的任务确实可以转移出去。而转移到的位置恰好是空间有余、时间富裕的,那么这种优化就是可取的。🉑️

    时间转移到空间

    思想:通过开辟更大的空间来缩短执行的时间
    场景:如*多线程*
    
    • 1
    • 2

    空间转移到时间

    思想:通过延长执行的时间来节省空间
    场景:如*消息队列*
    
    • 1
    • 2

    时间转移到时间

    思想:通过将问题处理的时间提前或推迟达到当下时间点的优化
    场景:如*预加载**懒加载*
    
    • 1
    • 2

    空间转移到空间

    思想:通过将当前问题移交给其他模块处理达到当前空间点的优化
    场景:如*分布式计算*
    
    • 1
    • 2

    时间和空间的权衡

    思想:将上述四种方法按一定比例组合使用,设计这个组合关系。
    场景:如*hadoop或spark的架构设计*
    
    • 1
    • 2

    关键是我们把负面影响转移到哪里了?

    是不是转移到负面影响比之前更小的地方?

    如果答案是,就可以把这种有负面影响的优化当成第三种优化的维度。

    三维度性能优化方向

    通过这三个维度的抽象,为我们提供了任意场景优化的思考方向。对于任何需要优化的模块,基本都可以从这三个维度思考是否有优化空间。

    • 时间优化
    • 空间优化
    • 问题转移

    三维度性能优化全景

    介于上述分析,整理的官网性能优化全景如下:

    以行为,目的的形式细化二级分类

    时间优化

    1、节省计算时间,提升响应速度

    高性能编程

    合理进行状态管理

    精准控制组件的更新范围

    减少动画丢帧

    提升应用冷启动速度-分析应用冷启动耗时

    提升应用响应速度-使用容器限制刷新范围

    合理使用IPC通信-减少同步接口调用

    OpenHarmony应用程序动效能力实践-组件转场动画使用transition

    OpenHarmony应用程序动效能力实践-组件布局改动时使用图形变换属性动画

    2、减少访问、转换时间,提升响应速度

    高性能编程实践-属性访问与属性增删

    安全和高效的使用N-API开发Native模块-数值转换

    空间优化

    1、节约内存,节省空间

    安全和高效的使用N-API开发Native模块-缩短对象生命周期

    提升应用冷启动速度-缩短Application&Ability初始化阶段耗时

    2、避免溢出,节省空间

    高性能编程实践-数值计算避免溢出

    问题转移

    空间换时间

    1、增加内存,加快响应

    列表场景性能提升实践-组件复用

    高效并发编程

    组件复用实践

    WaterFlow高性能开发指导-组件复用

    2、异步,加快响应

    安全和高效的使用N-异步示例

    OpenHarmony多线程能力场景化示例实践

    提升应用冷启动速度-缩短Ability生命周期阶段耗时

    提升应用冷启动速度-缩短加载绘制首页阶段耗时

    提升应用响应速度-避免主线程被非UI任务阻塞

    时间换空间

    1、数据拆分处理,加快响应

    合理使用IPC通信-大数据IPC通信改为小数据批量IPC通信

    调整执行时间

    1、部分数据延迟加载,提升首次加载响应速度

    列表场景性能提升实践-懒加载

    正确使用LazyForEach优化

    WaterFlow高性能开发指导-使用懒加载

    WaterFlow高性能开发指导-无限滚动

    提升应用响应速度-按需加载列表组件的元素

    2、部分数据预加载,提升操作时响应速度

    列表场景性能提升实践-缓存列表项

    WaterFlow高性能开发指导-提前新增数据

    Swiper高性能开发指导-Swiper 预加载机制说明

    3、 动态加载换静态加载(提前到编译期),提升响应速度

    高性能编程实践-对象初始化

    高性能编程实践-避免使用type类型标注

    高性能编程实践-声明参数要和实际的参数一致

    高性能编程实践-避免动态声明function与class

    其他

    1、降低编码体验,提升响应速度并节省空间

    列表场景性能提升实践-布局优化


  • 相关阅读:
    uniapp录音功能
    18.1 Socket 原生套接字抓包
    Flullter学习第一天:什么是Flullter与Flullter安装
    使用VLC实现自动播放视频
    Lilishop 开源商城系统代码审计
    ALevel课程组合建议
    Git和SVN有什么区别?
    我来谈谈“人工智能”这个词给我带来了哪些想法
    个人设计和公司设计,哪个更适合你?
    windows下软件推荐
  • 原文地址:https://blog.csdn.net/gwh111/article/details/133932910
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号