文章目录
🏡作者主页:点击!
🤖HarmonyOS专栏:点击!
⏰️创作时间:2024年12月10日11点11分
应用性能优化
ArkTS高性能编程
ArkTS基于TypeScipt,但有一些特性被限制
- 禁止使用delete p1.x(动态删除类型属性的方式)
- 禁用 @ts-ignore 和 @ts-expect-error 等频闭编译校验命令
ArkTS不支持any和unknown
- 不支持使用any和unknown,需要明确类型,或使用联合类型、泛指object替代any,必须使用any的场景可以使用 ESObject 代替,但是会存在性能问题,慎用
在@Prop和@ObjectLink使用效果相同的场景下,优先选择@ObjectLink是为了减少系统内存开销。这是因为@ObjectLink通过引用传递数据,避免了深拷贝带来的性能开销
合理使用布局
针对减少总节点,主要有两个方向
- 移除冗余节点
- 使用扁平化布局减少节点数
当页面不存在冗余节点时,可以考虑是否能够通过替换更为高级的布局使得页面扁平化,来达到减少节点数的目的,主要方式可以考虑
- RelativeContainer通过相对布局实现扁平化
- 绝对定位通过锚点实现扁平化
- Grid通过二维布局实现扁平化
合理使用控制元素显示与隐藏
- 只有初始的一次渲染或者交互次数很少的情况下,建议使用if条件判断来控制元素的显示与隐藏效果,对于内存有较大提升
- 如果会频繁响应显示与隐藏的交互效果,建议使用切换 Visibility.None 和 Visibility.Visible 来控制元素显示与隐藏,提高性能
在控制组件显示与隐藏时,建议遵循以下原则来选择使用控制方式
- 在对性能要求较高,并且会频繁切换元素的显示与隐藏的情况下,应该避免使用if条件判断,而改为通过visibility的属性控制,这样在切换Visibility.None和Visibility.Visible时,可以省去组件创建的时间,直接进入渲染过程。
- 如果组件的创建非常消耗资源,且不会立即使用,也并非频繁切换交互的情况下,只在特定条件下才会出现时,可以通过if/else来进行内容的显示与隐藏控制,来达到懒加载的效果。
常用的基础布局组件包含----(线性布局)
- 使用Row、Column构建线性布局。
- 使用Stack构建层叠布局。
复杂布局能力
- 使用Flex构建弹性布局。
- List既具备线性布局的特点,同时支持懒加载和滑动的能力。
- Grid/GridItem提供了宫格布局的能力,同时也支持懒加载和滑动能力。
- RelativeContainer是一种相对布局,通过描述各个内容组件间相互关系来指导内容元素的布局过程,可从横纵两个方面进行布局描述,是一种二维布局算法。
复杂布局提供了场景化的能力,解决一种或者多种布局场景
处理丢帧问题以下四个步骤
- 识别卡顿
- 分析丢帧原因
- 选择优化方案
- 验证优化结果