📚往期笔录记录✏️:
✏️ 鸿蒙应用开发与鸿蒙系统开发哪个更有前景?
✏️ 嵌入式开发适不适合做鸿蒙南向开发?看完这篇你就了解了~
✏️ 对于大前端开发来说,转鸿蒙开发究竟是福还是祸?
✏️ 鸿蒙岗位需求突增!移动端、PC端、IoT到底该怎么选?
✏️ 记录一场鸿蒙开发岗位面试经历~
✏️ 持续更新中……
简介
组件复用是优化用户界面性能,提升应用流畅度的一种重要手段,通过复用已存在的组件节点而非创建新的节点,从而确保UI线程的流畅性与响应速度。
组件复用针对的是自定义组件,只要发生了相同自定义组件销毁和再创建的场景,都可以使用组件复用,例如滑动列表场景,会出现大量重复布局的创建,使用组件复用可以大幅度降低了因频繁创建与销毁组件带来的性能损耗。
然而,面对复杂的业务场景或者布局嵌套的场景下,组件复用使用不当,可能会导致复用失效或者性能提升不能最大化。例如列表中存在多种布局形态的列表项,无法直接复用。
本文基于对常见的布局类型进行划分,通过合理使用组件复用方式,帮助开发者更好的理解和实施组件复用策略以优化应用性能。
组件复用实现方法
组件复用的实现方式主要有以下两种:
- 系统提供的组件复用:使用@Reusable装饰器修饰自定义组件,使其具备组件复用能力,其原理机制可以参考 组件复用原理与使用 。
- 自定义组件复用:使用BuilderNode实现全局复用。
系统提供的组件复用的行为,是将子组件放在父组件的复用缓存池里,缓存池是一个Map套Array的数据结构,以reuseld为key,具有相同reuseld的组件在同一个List中,可以相互复用,reuseld默认是自定义组件的名字。
根据这个原理系统提供的组件复用有如下两条约束和限制:
- 不同复用组件(组件名不同或者reuseld不同)之间相同子组件无法复用,因为它们在缓存池的不同List中,如下图所示,子组件B之间无法复用。
如果想要子组件B之间进行复用,可以将复用组件改为@Builder函数,然后将子组件B使用@Reusable修饰,这样子组件的缓存池就会在父组件上共享。
- 不同父组件中的相同子组件无法复用,因为它们在不同的缓存池,如下图所示,复用组件1之间无法复用。
对于这种嵌套比较多的情况下,导致想要复用的组件不在一个父组件的场景下,可以使用BuilderNode实现全局复用。
复用类型详解
组件复用基于不同的布局效果和复用的诉求,可以分为以下五种类型。
表1 组件复用类型说明
复用类型 | 描述 | 复用思路 |
---|---|---|
标准型 | 复用组件之间布局完全相同 | 标准复用 |
有限变化型 |