渲染范围控制
合理控制元素显示与隐藏
控制元素显示与隐藏是一种常见的场景,使用Visibility.None、if条件判断等都能够实现该效果。其中if条件判断控制的是组件的创建、布局阶段,visibility属性控制的是元素在布局阶段是否参与布局渲染。使用时如果使用的方式不当,将引起性能上的问题。具体案例与实验数据请参阅合理控制元素显示与隐藏。
懒加载
懒加载LazyForEach是一种延迟加载的技术,它是在需要的时候才加载数据或资源,并在每次迭代过程中创建相应的组件,而不是一次性将所有内容都加载出来。通常应用于长列表优化、网格优化、瀑布流优化等数据量较大、子组件可重复使用的场景,当用户滚动页面到相应位置时,才会触发资源的加载,以减少组件的加载时间,提高应用性能,提升用户体验。
懒加载可以通过设置cachedCount来指定缓存数量,在设置cachedCount后,除屏幕内显示的Item组件外,还会预先将屏幕可视区外指定数量的数据缓存。具体的原理与优化案例请参阅缓存列表项。
组件复用
组件复用是优化用户界面性能,提升应用流畅度的一种重要手段,通过复用已存在的组件节点而非创建新的节点,从而确保UI线程的流畅性与响应速度。组件复用针对的是自定义组件,只要发生了相同自定义组件销毁和再创建的场景,都可以使用组件复用,例如长列表优化、瀑布流优化、Swiper组件优化等场景,会出现大量重复布局的创建,使用组件复用可以大幅度降低了因频繁创建与销毁组件带来的性能损耗。组件复用的基本原理请参阅组件复用最佳实践。组件复用基于不同的布局效果和复用的诉求,可以分为以下五种类型:
复用类型 | 描述 | 复用思路 |
---|---|---|
标准型 | 复用组件之间布局完全相同 | 标准复用 |
有限变化型 | 复用组件之间布局有所不同,但是类型有限 | 使用reuseId或者独立成不同自定义组件 |
组合型 | 复用组件之间布局有不同,情况非常多,但是拥有共同的子组件 | 将复用组件改为@Builder,让内部子组件相互之间复用 |
全局型 | 组件可在不同的父组件中复用,并且不适合使用@Builder | 使用BuilderNode自定义复用组件池,在整个应用中自由流转 |
嵌套型 | 复用组件的子组件的子组件存在差异 | 采用化归思想将嵌套问题转化为上面四种标准类型来解决 |
组件复用具体的场景与方法请参阅组件复用场景与方法详解。
分帧渲染
在应用开发中,页面内列表结构复杂,每个列表项包含的组件较多,就会导致嵌套层级较深,从而引起组件负载加重,绘制耗时增长。在这种情况下,转场或者列表滑动的时候列表项就会一次性加载大量的数据,此时可以采用分帧渲染,将本来一帧内加载的数据分成多帧加载,但是分帧渲染需要开发者计算每帧中加载多少数据,操作复杂,因此在必要的情况下才推荐使用。具体的原理与优化案例请参阅高负载场景下分帧渲染。