Fases y rendimiento de Compose

Cuando Compose actualiza un fotograma, atraviesa por tres fases:

  • Composición: Compose determina qué mostrar. Ejecuta funciones que admiten composición y compila el árbol de IU.
  • Diseño: Compose determina el tamaño y la posición de cada elemento en el árbol de IU.
  • Dibujo: En realidad, Compose renderiza los elementos individuales de la IU.

Compose puede omitir de manera inteligente cualquiera de esas fases si no es necesaria. Por ejemplo, supongamos que un solo elemento gráfico cambia entre dos íconos del mismo tamaño. Como ese elemento no cambia de tamaño y no se agregan ni quitan elementos del árbol de IU, Compose puede omitir las fases de composición y diseño, y volver a dibujar ese elemento.

Sin embargo, los errores de codificación pueden dificultar que Compose sepa las fases que puede omitir con seguridad, en cuyo caso Compose ejecuta las tres fases, lo que puede ralentizar la IU. Por lo tanto, muchas de las prácticas recomendadas de rendimiento se relacionan con ayudar a Compose a omitir las fases que no necesita hacer.

Para obtener más información, consulta la guía Fases de Jetpack Compose.

Principios generales

Se deben seguir algunos principios generales que pueden mejorar el rendimiento en general:

  • Cuando sea posible, quita los cálculos de las funciones que admiten composición. Es posible que se deban volver a ejecutar las funciones que admiten composición cada vez que cambia la IU. Cualquier código que coloques en el elemento que admite composición se volverá a ejecutar, potencialmente, para cada fotograma de una animación. Limita el código del elemento que admite composición a lo que realmente necesita para compilar la IU.
  • Aplaza las lecturas de estado el mayor tiempo posible. Si mueves la lectura de estado a un elemento secundario que admite composición o a una fase posterior, puedes minimizar la recomposición, o bien omitir la fase de composición por completo. Para ello, puedes pasar las funciones lambda en lugar del valor de un estado que cambia con frecuencia y puedes priorizar los modificadores basados en lambda cuando pasas un estado de este tipo. Puedes ver un ejemplo de esta técnica en la sección Aplaza las lecturas el mayor tiempo posible de Sigue las prácticas recomendadas.

Recursos adicionales