Comparativas de hero

Los comparativos de referencia de héroes son un conjunto de comparativos que abarcan los recorridos de usuario de alto nivel de la app, como el inicio de la app o el desplazamiento en la app de Pokedex de código abierto.

  • Comparativas de héroes de inicio: Se hace un seguimiento del tiempo que transcurre desde que se abre la app hasta que se muestra el contenido.
  • Comparativas de desplazamiento heroico: Medición del rendimiento de desplazamiento de una cuadrícula diferida con imágenes.

Configuración de la prueba

  • Selección de la app: Realizamos estas pruebas con la app de Pokedex de código abierto, comparando sus versiones basadas en View y Compose. La app se seleccionó para representar situaciones del mundo real y no fue desarrollada por el equipo de Compose.
  • Configuración del hardware: Ejecutamos comparativas en un Pixel 3a con Android 12 (API 31) con CPUs y GPUs bloqueadas. Este dispositivo se usa como el modelo de referencia de rendimiento estándar para las comparativas de dispositivos destacados.
  • Configuración de compilación: Las comparativas usan la app compilada en modo de lanzamiento con R8 habilitado. La app se compila previamente por completo para reducir la inestabilidad de la compilación justo a tiempo (JIT).
  • Selección de resultados: Para garantizar el análisis del peor caso, se excluyeron los valores atípicos extremos y el ruido no representativo de los resultados de la comparativa. Luego, se estableció un valor de referencia seleccionando los valores medianos de los datos de rendimiento del límite superior.

Comparativas de héroes de startups

Para medir el inicio, usamos PokedexStartupBenchmark. El PokedexStartupBenchmark mide el tiempo que tarda la app de Pokedex en ser visible para el usuario.

El inicio de una app se puede llevar a cabo en uno de estos tres estados: inicio en frío, inicio semicaliente o inicio en caliente. Cada estado determina el tiempo que tarda una app en volverse visible para el usuario. En un inicio en frío, la app se inicia desde cero. En esta comparativa, medimos el rendimiento del inicio de la app en el estado de inicio en frío. Te recomendamos que siempre optimices la app en función de la perspectiva de un inicio en frío. ya que esto también puede mejorar el rendimiento de los inicios semicalientes y en caliente.

Las métricas que usamos para medir el tiempo de inicio de la app son el tiempo para la visualización inicial y el tiempo para la visualización completa.

Tiempo para la visualización inicial

El tiempo para la visualización inicial (TTID) mide el tiempo que tarda una app en producir su primer fotograma, incluidas la inicialización del proceso durante un inicio en frío, la creación de la actividad durante un inicio en frío o semicaliente, y la visualización del primer fotograma.

En el PokedexStartupBenchmark, Compose 1.11 es un 2.5% más lento que Views para el TTID con un inicio en frío.

Compose 1.11 es un 2.5% más lento que Views para el TTID
Figura 1: Comparación de Compose 1.11 con Views para el TTID.

Tiempo para la visualización completa

El tiempo para la visualización completa (TTFD) mide el tiempo hasta que la app se vuelve interactiva. Esto significa que se cargaron y dibujaron todos los datos. Para obtener más información sobre el tiempo hasta la visualización completa, consulta Tiempo de inicio de la app.

En el PokedexStartupBenchmark, Compose 1.11 es un 13.0% más lento que Views para el TTFD con un inicio en frío.

Compose 1.11 es un 13.0% más lento que Views para el TTFD
Figura 2: Comparación de Compose 1.11 con Views para el TTFD.

Comparativas de héroes de desplazamiento

Para medir el rendimiento del desplazamiento, usamos PokedexScrollBenchmark. Mide el rendimiento del desplazamiento de la pantalla de la app de Pokedex para una cuadrícula diferida con imágenes. En esta comparativa, se desplaza y se lanza toda la pantalla varias veces, y se cargan elementos nuevos. El rendimiento del desplazamiento se mide según la tasa de jank.

Tasa de bloqueo

Los dispositivos Android renderizan hasta 60 o 120 fotogramas por segundo (FPS). Esto significa que el sistema tiene un plazo estricto (por ejemplo, 16.6 ms para 60 FPS) para producir un fotograma. Si la app tarda demasiado en realizar su trabajo, esto puede provocar un tartamudeo visible que llamamos jank.

En el PokedexScrollBenchmark, Compose y Views logran el mismo rendimiento de un 0.21% de tirones desde Compose 1.9.0. En términos absolutos, 1 de cada 485 fotogramas era inestable.

Estos comparativos muestran que Compose 1.9 y versiones posteriores igualan el rendimiento de Views en cuanto a tirones durante el desplazamiento.

Desde Compose 1.9.0, Compose y Views tienen el mismo porcentaje de jank
Desde Compose 1.9.0, Compose y Views tienen la misma tasa de jank.

Ejecuta comparativas de héroes

Para validar los resultados de rendimiento y ejecutar las comparativas de forma local, haz lo siguiente:

  1. Sigue la guía de AndroidX para consultar el código fuente.
  2. Sigue las instrucciones que se indican en el código fuente de Hero Benchmarks.

Puedes ejecutar estas comparativas en cualquier dispositivo compatible, como un dispositivo específico para el que estás optimizando tu app. Sin embargo, para validar los resultados oficiales, usa la misma configuración de hardware.