Casos de éxito
Cómo usó Reddit el optimizador R8 para mejorar el rendimiento de forma significativa
Lectura de 4 minutos
En el mundo actual de las aplicaciones móviles, una experiencia de usuario fluida no es solo una función, sino una necesidad. Los tiempos de carga lentos, las interfaces que no responden y la inestabilidad pueden ser obstáculos importantes para la interacción y la retención de los usuarios. Durante su colaboración con el equipo de relaciones con desarrolladores de Android, el equipo de ingeniería de Reddit usó la puntuación de rendimiento de la aplicación para evaluar su aplicación. Tras analizar su rendimiento, identificaron un potencial de mejora significativo y decidieron tomar las medidas necesarias para aprovechar al máximo R8, el optimizador de aplicaciones Android. Esta iniciativa específica ha dado lugar a mejoras notables en los tiempos de inicio, a una reducción de los fotogramas lentos o congelados y de los errores ANR, y a un aumento general de las valoraciones en Play Store. En este caso de éxito se explica cómo consiguió Reddit estos impresionantes resultados.
Cómo ayudó el optimizador R8 a Reddit
El optimizador R8 es una herramienta básica para optimizar el rendimiento en Android. Se siguen varios pasos para mejorar el rendimiento de las aplicaciones.Vamos a echar un vistazo rápido a los más importantes.
- La sacudida del árbol es el paso más importante para reducir el tamaño de una aplicación. Aquí se elimina el código no utilizado de las dependencias de la aplicación y de la propia aplicación.
- La inserción de métodos sustituye las llamadas a métodos por el código real, lo que mejora el rendimiento de la aplicación.
- Se aplican fusiones de clases y otras estrategias para que el código sea más compacto. En este punto, ya no se trata de que los humanos puedan leer el código fuente, sino de que el código compilado funcione rápido. Por lo tanto, las abstracciones, como las interfaces o las jerarquías de clases, no importan en este caso y se eliminarán.
- La minificación de identificadores cambia los nombres de las clases, los campos y los métodos por nombres más cortos y sin significado. Por lo tanto, en lugar de
MyDataModel, puede que acabes con una clase llamada "a". - La reducción de recursos elimina los recursos que no se usan, como los archivos XML y los elementos de diseño, para reducir aún más el tamaño de la aplicación.
Fases principales de la optimización de R8
De los datos objetivos a la satisfacción de los usuarios: cómo identificar el éxito en producción
Reddit observó una mejora en el rendimiento inmediatamente después de lanzar una nueva versión de la aplicación a los usuarios. Gracias a Android Vitals y Crashlytics, Reddit pudo recoger métricas de rendimiento en dispositivos reales con usuarios reales, lo que le permitió comparar el nuevo lanzamiento con las versiones anteriores.
Cómo mejoró R8 el rendimiento de la aplicación de Reddit
El equipo observó que el arranque en frío era un 40% más rápido, que los errores "La aplicación no responde" (ANR) se redujeron en un 30% , que el renderizado de los fotogramas mejoró en un 25% y que el tamaño de la aplicación se redujo en un 14% .
Estas mejoras son fundamentales para la satisfacción de los usuarios. Un inicio más rápido significa menos tiempo de espera y un acceso más rápido al contenido. Si hay menos errores ANR, la aplicación será más estable y fiable, lo que reducirá la frustración de los usuarios. La renderización de fotogramas más fluida elimina los tirones de la interfaz de usuario, lo que hace que el desplazamiento y las animaciones sean fluidos y respondan bien. Este impacto técnico positivo también se reflejó claramente en la opinión de los usuarios.
Los indicadores de satisfacción de los usuarios sobre el éxito de la optimización se podían ver directamente en Google Play Store. Tras el lanzamiento de la versión optimizada para R8, el equipo observó un cambio drástico y positivo en el sentimiento y la interacción de los usuarios.
Drew Heavner: "Habilitar todo el potencial de R8 en menos de dos semanas"
Lo más impresionante es que se ha conseguido con un esfuerzo concentrado. Drew Heavner, ingeniero de software de Reddit que ha trabajado en esta iniciativa, ha señalado que implementar los cambios para aprovechar todo el potencial de R8 ha llevado menos de dos semanas.
Confirmar las mejoras: análisis detallado con macrobenchmarks
Tras observar las mejoras significativas en el mundo real, el equipo de ingeniería de Reddit y el equipo de relaciones con desarrolladores de Android de Google llevaron a cabo comparativas detalladas para confirmar científicamente las ventajas y experimentar con otras optimizaciones. Para este análisis, el equipo de ingeniería de Reddit proporcionó dos versiones de su aplicación: una sin optimizaciones y otra que aplicaba R8, así como otras dos herramientas de optimización del rendimiento fundamentales: Baseline Profiles y Startup Profiles.
Los perfiles de línea de base trasladan de forma eficaz los pasos de compilación Just-in-Time (JIT) de los dispositivos de los usuarios a los ordenadores de los desarrolladores. Se ha demostrado que el código compilado con la compilación anticipada (AOT) reduce el tiempo de inicio y los problemas de renderización.
Cuando se empaqueta una aplicación, el dexer d8 toma clases y métodos y crea los archivos classes.dex de la aplicación. Cuando un usuario abre la aplicación, estos archivos dex se cargan uno tras otro hasta que la aplicación puede iniciarse. Si proporcionas un perfil de inicio, indicas a d8 qué clases y métodos debe incluir en los primeros archivos classes.dex. Esta estructura permite que la aplicación cargue menos archivos, lo que a su vez mejora la velocidad de inicio.
Jetpack Macrobenchmark fue la herramienta principal de esta fase, ya que permitió medir con precisión las interacciones de los usuarios en un entorno controlado. Para simular el recorrido de un usuario típico, usaron la API UIAutomator para crear una prueba que abriera la aplicación, se desplazara hacia abajo tres veces y, después, hacia arriba.
Al final, lo único que se necesitó para escribir la prueba comparativa fue lo siguiente:
uiAutomator {
startApp(REDDIT)
repeat(3) {
onView { isScrollable }.fling(Direction.DOWN) }
repeat(3) {
onView {isScrollable }.fling(Direction.UP)
}
}Los datos de las comparativas confirmaron las observaciones de campo y proporcionaron información más detallada. La aplicación totalmente optimizada se iniciaba un 55% más rápido y los usuarios podían empezar a navegar un 18% antes. La aplicación optimizada también mostró una reducción de dos tercios en las ocurrencias de compilación Just-in-Time (JIT) y una disminución de un tercio en el tiempo de compilación JIT. El renderizado de los fotogramas ha mejorado, lo que ha supuesto que se renderizaran un 19% más de fotogramas en el recorrido de usuario de referencia. Por último, el tamaño de la aplicación se redujo en más de un tercio.
Mejoras generales del rendimiento de Reddit
Puedes medir el tiempo de compilación JIT con una métrica de sección de traza de Macrobenchmark personalizada como esta:
val jitCompilationMetric = TraceSectionMetric("JIT Compiling %", label = "JIT compilation")Habilitar la tecnología que hay detrás de la transformación: R8
Para habilitar R8 en modo completo, configura el archivo app/build.gradle.kts asignando el valor true a minifyEnabled y shrinkResources en el tipo de compilación de lanzamiento.
android {
...
buildTypes {
release {
isMinifyEnabled = true
isShrinkResources = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"keep-rules.pro",
)
}
}
}Después de este paso, debes realizar pruebas integrales, ya que las optimizaciones del rendimiento pueden provocar comportamientos no deseados, que es mejor detectar antes de que lo hagan los usuarios.
Como se ha mostrado anteriormente en este artículo, R8 realiza optimizaciones exhaustivas para maximizar las ventajas de rendimiento. R8 hace modificaciones sustanciales en el código, como cambiar el nombre, mover y eliminar clases, campos y métodos. Si observa que estas modificaciones provocan errores, debe especificar qué partes del código no debe modificar R8 declarándolas en reglas de conservación.
Sigue el ejemplo de Reddit en tu aplicación
El éxito de Reddit con R8 es un caso práctico muy útil para cualquier equipo de desarrollo que quiera mejorar significativamente el rendimiento de su aplicación con poco esfuerzo. La correlación directa entre las mejoras técnicas y el aumento posterior de la satisfacción de los usuarios subraya el valor de la optimización del rendimiento.
Si siguen el plan detallado en este caso práctico (usar herramientas como la puntuación de rendimiento de la aplicación para identificar oportunidades, aprovechar todo el potencial de optimización de R8, monitorizar los datos reales y usar comparativas para confirmar y profundizar en el conocimiento), otros desarrolladores pueden conseguir resultados similares.
Para empezar a usar R8 en tu aplicación, consulta la documentación y las directrices oficiales, que se han actualizado recientemente, sobre cómo habilitar y configurar el optimizador R8, así como solucionar problemas relacionados con él.
Seguir leyendo
-
Casos de éxito
TikTok es una plataforma mundial de vídeos cortos conocida por su enorme base de usuarios y sus innovadoras funciones.
Ben Trengrove, Ajesh Pai • Tiempo de lectura: 2 min
-
Casos de éxito
En el dinámico mundo de las redes sociales, la atención de los usuarios se gana o se pierde rápidamente. Las aplicaciones de Meta (Facebook e Instagram) son algunas de las plataformas sociales más grandes del mundo y prestan servicio a miles de millones de usuarios en todo el mundo.
Mayuri Khinvasara Khabya • Tiempo de lectura: 4 min
-
Casos de éxito
Crear una aplicación Android para un wearable significa que el trabajo de verdad empieza cuando se apaga la pantalla.
Breana Tate • Tiempo de lectura: 4 min
Mantente al día
Recibe cada semana en tu bandeja de entrada las últimas novedades sobre el desarrollo para Android.