HarmonyOS NEXT应用元服务布局优化利用布局边界减少布局计算

鸿蒙时代
发布于 2025-6-26 11:00
浏览
0收藏

对于组件的宽高不需要自适应的情况下,建议在UI描述时给定组件的宽高数值,当其组件外部的容器尺寸发生变化时,例如拖拽缩放等场景下,如果组件本身的宽高是固定的,理论上来讲,该组件在布局阶段不会参与Measure阶段,其节点中保存了对应的大小信息,如果组件内容较多时,由于避免了其中组件整体的测算过程,性能会带来较大的提升。
我们通过修改以下示例代码中Column的宽度,对比给Row设置固定宽度.width(300).height(400)、百分比.width(‘100%’).height(‘70%’)以及不设置宽高的情况下的页面绘制、Measure、Layout时间。

.Column() {
.  Button("修改宽度").onClick(() => {
.    this.testWidth = '90%'
.  }).height('20%')
.
.  Row() {
.    // 400条文本数据
.  }
.}.width(this.testWidth )

对比的结果如下:
HarmonyOS NEXT应用元服务布局优化利用布局边界减少布局计算-鸿蒙开发者社区
说明
以上数据来源均为版本DevEco Studio 4.0.3.415、SDK 4.0.10.9条件下测试得到,不同设备类型数据可能存在差异,测试数据旨在体现性能优化趋势,仅供参考。
由上数据可以发现:
首次绘制时,三种情况数据相差不大。
重新绘制时,限定容器宽高为固定值的情况下,性能提升明显。
分析原因可以得到,这是由于首次绘制的情况下,无论是否设置宽高属性,都会对所有组件进行布局和测算的过程,来得到最终的组件大小和位置。而当触发按钮修改外层Column的宽度时,也就是触发重新绘制的情况下,给定容器宽高为固定值的性能远远优于未设置宽高和设置百分比宽高,这是由于对于未设置宽高以及设置百分比宽高的情况下,在外层容器宽高发生变化时,组件本身也会触发重新进行Measure的过程,对组件的宽高进行重新测算,导致其布局时间很长,而设置了固定宽高的组件,则不会经过这一过程,而是直接使用初次绘制时保留的节点大小数据,减少了测算的时间,这对于性能的提升是尤为明显的,尤其是当组件内的内容十分复杂的情况下。
所以对于能够在初期给定宽高的组件,在进行UI描述时尽量给定宽高数值,能够减少由于容器尺寸变化造成的重新测算过程的性能。

本文主要引用整理于鸿蒙官方文档

分类
1
收藏
回复
举报
回复
    相关推荐