美文网首页
面试题:为什么Compose可以嵌套?

面试题:为什么Compose可以嵌套?

作者: JarvanMo | 来源:发表于2024-12-20 16:27 被阅读0次

背景

问题:

为什么Compose可以无限嵌套而传统的xml却不可以?

要搞清楚这个问题首先还是得先了解二者绘制的差异,我说的可能不对,如果有问题,欢迎大家指出。

xml

以前我们用传统的xml绘制布局的时候都是要尽量减少布局的层级关系,以提升性能,因为层级的增加,会大幅拖慢界面的加载。这种拖慢的主要原因在于各种Layout的重复测量。尽管从客观上来说重复测量都布局来说是必不可少的,但它也确实使页面的加载时间随着页面层级的增加而产生了指数级的增长。一个ViewGroup对子view的测量可能是二次,三次甚至多次测量。对于一个会二次测量的系统来说,它的每个View的测量算法的时间复杂度是O(2^n),其中n是View的层级深度。当然了,这只是一个粗略的估计,因为不是第个View都会进行2次测量,也有会进行三次甚至多次测量。一句话说是就是,这种测量方式会导致View的层级每加深一级,它的加载时间就会翻一倍。

Compose

Compose可以无限套娃的原理也很简单,那就是禁止二次测量。如果每个组件对每个子组件只测量一次,那它的时间复杂度则降低到了O(n)。

为什么Compose可以禁止二测量

既然禁止二次测量可以极大提升View的布局效率,那为什么传统的View不直接禁掉?因为有用呗。既然有用,那Compose就不用了吗?因为Compose引入一个新的概念——Intrinsic Measurement,官方翻译叫固有特性测量。所谓的固有特性测量就是Compose允许父组件在对子组件进行正测测量之前,先测量一下这个子组件的“固有尺寸”,换大白话说就是,子组件内容的最大或者最小尺寸是多少,这其实就先进行这种粗略的测量,然后再进行最终的正式测量。

相关文章

  • compose函数和pipe函数

    compose函数 compose函数可以将需要嵌套执行的函数平铺,嵌套执行就是一个函数的返回值将作为另一个函数的...

  • Javascript进阶——函数式编程(2)

    函数式编程中,常用的函数及使用: 组合函数 (Compose,Pipe) 概念 将需要嵌套执行的函数平铺,嵌套执行...

  • 容器编排Docker-Compose少不了

    docker-compose容器编排 为什么使用docker-compose 什么是docker-compose ...

  • js函数式编程术语之compose组合函数

    compose 组合函数 概念:它将需要嵌套执行的函数平铺。嵌套执行指的是,一个函数的返回值将作为另一个函数的参数...

  • Compose 为什么可以跨平台?

    这是我在 2022 Kotlin 中文开发者大会[https://link.juejin.cn?target=ht...

  • 自动释放池

    AutoReleasePool的实现原理? AutoReleasePool为什么可以嵌套调用? 自动释放池 是以栈...

  • 嵌套规则

    块元素能嵌套所有元素p不能嵌套块,只能嵌套行内行内元素不能嵌套块元素行内可以嵌套行内,但是不能嵌套自己a可以嵌套任...

  • Docker三剑客之docker-compose

    一、Compose简介 Compose是用于定义和运行多容器Docker应用程序的工具。通过Compose,可以使...

  • ubuntu+docker搭建etcd集群

    本文基于compose管理镜像,对此不熟悉的,可以先了解下如何使用。 安装compose 下载compose,使用...

  • Compose 中嵌套原生 View 原理

    Compose 是用于构建原生 Android UI 的现代工具包,他只需要在 xml 布局中添加 Compose...

网友评论

      本文标题:面试题:为什么Compose可以嵌套?

      本文链接:https://www.haomeiwen.com/subject/rwisejtx.html