Las comparativas de Hero son un conjunto de comparativas que abarcan los recorridos del usuario de la app de alto nivel, como el inicio de la app o el desplazamiento en la app de código abierto de Pokedex.
- 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 de Hero: Mide el rendimiento del desplazamiento de una cuadrícula diferida con imágenes.
Configuración de las pruebas
- Selección de la app: Realizamos estas pruebas con la app de código abierto Pokedex, en la que comparamos sus versiones basadas en View y basadas en Compose. La app se seleccionó para representar situaciones del mundo real y no la desarrolló el equipo de Compose.
- Configuración del hardware: Las comparativas se ejecutaron en un Pixel 6 con Android 17 (nivel de API 37) con CPUs y GPUs bloqueadas. Antes de Compose 1.12, las comparativas se realizaban en un Pixel 3a. A partir de Compose 1.12, se usa el Pixel 6 como el modelo de referencia de rendimiento estándar para las comparativas principales, y Compose 1.11 también se midió en el Pixel 6 para realizar comparaciones.
- Configuración de compilación: Las comparativas usan la app compilada en el modo de lanzamiento con R8 habilitado. La app se precompila 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 de los casos, se excluyeron los valores atípicos extremos y el ruido no representativo de los resultados de la comparativa. Luego, se estableció un modelo de referencia seleccionando los valores de la mediana de los datos de rendimiento del límite superior.
Comparativas de héroes de inicio
Para medir el inicio, usamos PokedexStartupBenchmark. El
PokedexStartupBenchmark mide el tiempo que tarda la app de Pokédex 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.13 alcanza la visualización inicial en 147.65 ms en un inicio en frío. Este resultado se encuentra dentro del ruido normal de ejecución a ejecución de Compose 1.12.1 (145.51 ms) y Compose 1.11.4 (147.78 ms), y es un 3.4% más rápido que las vistas (152.87 ms).
| Versión | Tiempo para la visualización inicial (ms) |
|---|---|
| Compose 1.11 | 147.78 |
| Compose 1.12 | 145.51 |
| Compose 1.13 | 147.65 |
| Vistas | 152.87 |
Tiempo para la visualización completa
El tiempo para la visualización completa (TTFD) mide el tiempo que tarda la app en volverse interactiva. Esto significa que se cargaron y dibujaron todos los datos. Para obtener más información sobre el tiempo de visualización completa, consulta Tiempo de inicio de la app.
En el PokedexStartupBenchmark, Compose 1.13 alcanza la visualización completa en 202.79 ms en un inicio en frío. Este resultado se encuentra dentro del ruido normal de ejecución a ejecución de Compose 1.12.1 (201.96 ms) y Compose 1.11.4 (203.33 ms). Views alcanza la visualización completa en 180.32 ms, por lo que Compose 1.13 es un 12.5% más lento que Views para TTFD.
| Versión | Tiempo para la visualización completa (ms) |
|---|---|
| Compose 1.11 | 203.33 |
| Compose 1.12 | 201.96 |
| Compose 1.13 | 202.79 |
| Vistas | 180.32 |
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 Pokédex para una cuadrícula diferida con imágenes. En esta comparativa, se desplaza y se desliza toda la pantalla varias veces, y se cargan elementos nuevos. El rendimiento del desplazamiento se mide por la tasa de jank.
Tasa de bloqueos
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, puede causar un tartamudeo visible que llamamos jank.
En el PokedexScrollBenchmark, Compose iguala el rendimiento de las vistas con 0 puntos porcentuales de jank excesivo desde Compose 1.9.0. En Pixel 6, Views y Compose tienen un 0.00% de jank en Compose 1.11.4, 1.12.1 y 1.13.
| Versión de Compose | Dispositivo | Bloqueos excesivos en las vistas (pp) |
|---|---|---|
| 1.3.3 | Pixel 3a | +0.35 |
| 1.4.3 | Pixel 3a | +0.41 |
| 1.5.4 | Pixel 3a | +0.42 |
| 1.6.8 | Pixel 3a | +0,21 |
| 1.7.8 | Pixel 3a | +0.36 |
| 1.8.0 | Pixel 3a | +0.38 |
| 1.9.0 | Pixel 3a | 0 |
| 1.10.0 | Pixel 3a | 0 |
| 1.11 | Pixel 6 | 0 |
| 1.12 | Pixel 6 | 0 |
| 1.13 | Pixel 6 | 0 |
Ejecuta comparativas de héroe
Para validar los resultados de rendimiento y ejecutar las comparativas de forma local, haz lo siguiente:
- Sigue la guía de AndroidX para consultar el código fuente.
- Sigue las instrucciones del archivo README del código fuente de Hero Benchmarks para compilar los APKs de comparativas y de destino (
pokedex-macrobenchmarkypokedex-macrobenchmark-target), instalarlos en un dispositivo de prueba y ejecutar los paquetesPokedexStartupBenchmarkyPokedexScrollBenchmarkconadbo Android Studio.
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.