Jetpack Compose acelera el desarrollo de IU y mejora Android y desarrollo. Sin embargo, ten en cuenta agregar Compose a una app existente puede afectar métricas, como el tamaño del APK de una app, compilación y rendimiento del entorno de ejecución.
Tamaño del APK y tiempos de compilación
En esta sección, se repasa el impacto en el tamaño del APK y el tiempo de compilación mediante la App de ejemplo de Sunflower: Una app que demuestra las prácticas recomendadas con la migración de una app basada en objetos View a Compose.
Tamaño del APK
Si agregas bibliotecas a tu proyecto, aumentará el tamaño del APK. Los siguientes resultados son para el APK de lanzamiento reducido de cada proyecto con recurso y código reducción habilitada, con el modo completo de R8 y medida con el Analizador de APK.
Solo vistas | Mixes de Views y Compose | Solo Compose | |
---|---|---|---|
Tamaño de la descarga | 2,252 KB | 3,034 KB | 2,966 KB |
Cuando agregaste Compose a Sunflower por primera vez, el tamaño del APK aumentó de 2,252 KB a 3,034 KB, un aumento de 782 KB. El APK generado constaba de la compilación de la IU con una combinación de Views y Compose. Se prevé que este aumento sea mayor se agregaron dependencias a Sunflower.
Por el contrario, cuando se migró Sunflower a una app exclusiva de Compose, el tamaño del APK
disminuyó de 3,034 KB a 2,966 KB, lo que representa una disminución de 68 KB. Esta disminución se debió
para quitar dependencias de View sin usar, como AppCompat
y
ConstraintLayout
Tiempo de compilación
Agregar Compose aumenta el tiempo de compilación de tu app como compilador de Compose.
procesa elementos componibles en tu app. Los siguientes resultados se obtuvieron usando el
Herramienta gradle-profiler
independiente, que ejecuta una compilación varias veces para
que se pueda obtener un tiempo de compilación promedio para la duración de la compilación de depuración de
Girasol:
gradle-profiler --benchmark --project-dir . :app:assembleDebug
Solo vistas | Mixes de Views y Compose | Solo Compose | |
---|---|---|---|
Tiempo promedio de compilación | 299.47 ms | 399.09 ms | 342.16 ms |
Cuando agregaste Compose a Sunflower por primera vez, el tiempo de compilación promedio aumentó de 299 ms a 399 ms, un aumento de 100 ms. Esta duración se debe al compilador de Compose realizar tareas adicionales para transformar el código de Compose definido en el proyecto
Por el contrario, el tiempo de compilación promedio se redujo a 342 ms, una disminución de 57 ms, cuando Se completó la migración de Sunflower a Compose. Esta reducción puede atribuirse a varios factores que reducen colectivamente el tiempo de compilación, como la eliminación de datos de enlace, migrar dependencias que usen kapt a KSP, y actualizar varias dependencias a sus últimas versiones.
Resumen
Cuando usas Compose, aumentarás de manera eficaz el tamaño del APK de tu app y también aumentar el rendimiento del tiempo de compilación de tu app debido al proceso de compilación del código de Compose. Sin embargo, se deben sopesar estas ventajas y desventajas beneficios de Compose, especialmente en lo que respecta al aumento de la productividad de los desarrolladores cuando adoptes Compose. Por ejemplo, el equipo de Play Store encontró que la escritura de la IU requiere mucho menos código, a veces hasta un 50%, por lo que lo que aumenta la productividad y la capacidad de mantenimiento del código.
Puedes leer más casos de éxito en Cómo adoptar Compose para equipos.
Rendimiento del tiempo de ejecución
En esta sección, se abordan temas relacionados con el rendimiento del tiempo de ejecución en Jetpack Compose para para comprender cómo se compara Jetpack Compose con el rendimiento del sistema de View, y cómo se puede medir.
Recomposiciones inteligentes
Cuando partes de la IU no son válidas, Compose intenta recomponer solo el porciones que deben actualizarse. Obtén más información sobre esto en el Ciclo de vida de elementos componibles y Jetpack Compose fases.
Perfiles de Baseline
Los perfiles de Baseline son es una excelente manera de acelerar los recorridos comunes de los usuarios. Incluir un modelo de referencia Los perfiles de tu app pueden mejorar la velocidad de ejecución del código en aproximadamente un 30% desde el primer lanzamiento evitando la interpretación y los pasos de compilación justo a tiempo (JIT) para instrucciones de código incluidas.
La biblioteca de Jetpack Compose incluye su propio Perfil de Baseline y tú obtendrás automáticamente estas optimizaciones cuando uses Compose en tu app. Sin embargo, estas optimizaciones solo afectan a las rutas de código dentro de la biblioteca de Compose, por lo que te recomendamos agregar un perfil de Baseline a tu para abarcar rutas de código fuera de Compose.
Comparación con el sistema de View
Jetpack Compose tiene muchas mejoras en comparación con el sistema de View. Estas mejoras se describen en las siguientes secciones.
Todo supera a View
Cada View
que se muestra en la pantalla, como TextView
, Button
o ImageView
, requiere asignaciones de memoria, seguimiento de estado explícito y varias devoluciones de llamada para admitir todos los casos de uso. Además, el propietario del View
personalizado debe
implementar lógica explícita para evitar el rediseño cuando no está
lo que sea necesario, por ejemplo,
para el procesamiento repetitivo de datos.
Jetpack Compose lo soluciona de varias maneras. Compose no tiene contenido explícito
que se pueden actualizar
para dibujar vistas. Los elementos de la IU son funciones de componibilidad simples
cuya información se escribe en la composición de manera que se pueda volver a reproducir. Esto ayuda
reducir el seguimiento de estado explícito, las asignaciones de memoria y las devoluciones de llamada solo a los
elementos componibles que requieren esas funciones en lugar de que las requieran
extensiones de un tipo View
determinado.
Además, Compose proporciona recomposiciones inteligentes, volver a reproducir el resultado obtenido anteriormente si no necesitas hacer cambios.
Múltiples pases de diseño
Los ViewGroups tradicionales tienen mucha expresividad en la medición y el diseño. APIs que los hacen propensos a varios pases de diseño. Realizar varios pases de diseño puede agregar más trabajo si se realizan en ciertos puntos anidados de la jerarquía de vistas.
Jetpack Compose aplica un solo pase de diseño para todos los elementos de diseño componibles a través de su contrato de API. Esto permite que Compose y administrar árboles detallados de la IU. Si se necesitan varias mediciones, Compose tiene mediciones intrínsecas.
El rendimiento del inicio de View
El sistema de View debe aumentar los diseños XML cuando muestra un diseño en particular por primera vez. Este costo se ahorra en Jetpack Compose, ya que los diseños se escritas en Kotlin y compiladas como con el resto de tu app.
Comparativas de Compose
En Jetpack Compose 1.0, existen diferencias notables entre el rendimiento de una app en los modos debug
y release
. Para los tiempos representativos, siempre usa la compilación de release
en lugar de debug
cuando generes perfiles de tu app.
Para comprobar el rendimiento de tu código de Jetpack Compose, puedes usar el biblioteca de Jetpack Macrobenchmark. Para saber cómo hacerlo para usarlo con Jetpack Compose, consulta el Proyecto de MacrobenchmarkSample.
El equipo de Jetpack Compose también usa Macrobenchmark para detectar regresiones que puede ocurrir. Por ejemplo, consulta la comparativa para la columna diferida. y su panel para hacer un seguimiento de las regresiones.
Instalación de perfiles de Compose
Como Jetpack Compose es una biblioteca sin empaquetar, no se beneficia de Zygote, que precarga los archivos Clases y elementos de diseño del kit de herramientas de IU Jetpack Compose 1.0 usa perfiles de instalación para compilaciones de lanzamiento. Los instaladores de perfiles permiten que las apps especifiquen código crítico para compilarse con anticipación (AOT) en el momento de la instalación. Compose envía las reglas de instalación del perfil que reducen los tiempos de inicio y los bloqueos en las apps de Compose.
Recomendaciones para ti
- Nota: El texto del vínculo se muestra cuando JavaScript está desactivado
- Otras consideraciones
- Cómo usar Compose en Views
- Desplazamiento