Zomato es un agregador de restaurantes multinacional y una empresa de entrega de comida india que atiende a clientes en 500 ciudades solamente de la India. Con más de 43 millones de clientes activos y un promedio de más de 1.5 millones de pedidos diarios, es uno de los servicios de pedidos y entrega de comida más populares del país. Esto también significa que los clientes usan una variedad de dispositivos y tienen una disponibilidad de red diferente. Además de la rapidez en las entregas, esto también hace imperativo tener una experiencia fluida y sin interrupciones en la app.
Los usuarios esperan tiempos de apertura de apps y capacidad de respuesta rápidos. La mejora de esta métrica no solo tiene un impacto directo en las Métricas de la app, sino que también garantiza que se completen más pedidos y respalda la estrategia de Zomato: expandirse a nuevos mercados y brindar una mejor experiencia en dispositivos de gama baja a media.Esto los ayudará a captar a sus próximos mil millones de usuarios. Los horarios de apertura de la aplicación también actúan como un indicador del aumento del tamaño del embudo a medida que los usuarios avanzan por el embudo de ventas.
Además, Zomato obtuvo beneficios impresionantes por enfocarse en las Métricas de la app. Por ejemplo, acelerar el tiempo de carga de la aplicación en un 30% generó una mejora de aproximadamente un 90% en la retención de clientes del primer día.
Desafío
El rápido ritmo de desarrollo de Zomato y su enfoque en agregar funciones, aunque era excelente para los clientes, dio lugar a la necesidad de optimizar su base de código y UX. Mientras buscaba agregar nuevas funciones, Zomato también quería mantener su rendimiento al mismo nivel. Dado que varios SDK consumían recursos que no siempre eran necesarios, era necesario optimizar y racionalizar la base de código.
Todo esto se sustentó con la expansión de Zomato a ciudades de nivel 2 y nivel 3 en la India, donde las personas utilizan en gran medida dispositivos de gama baja a media con una capacidad de procesamiento relativamente limitada. Con la inclusión de estos dispositivos, el equipo tuvo que garantizar la misma experiencia del usuario de primer nivel que en los dispositivos de nivel superior.
¿Qué hicieron?
Zomato utilizó una rúbrica sencilla para analizar los gastos generales: qué solución puede brindar el mejor retorno de la inversión en comparación con el esfuerzo del equipo de desarrollo. Con esta rúbrica, el equipo comenzó con un recorrido de 4 meses de optimización y mejora.
El primer paso fue analizar los registros del sistema para encontrar problemas, realizar análisis basados en el tiempo y priorizar según corresponda. Perfetto es la herramienta perfecta para analizar y registrar procesos de Android, y generar perfiles de ellos. Zomato utilizó la herramienta para rastrear todos los SDK que se inicializaban durante el inicio de la app y señalar aquellos que se pueden quitar o cargar de forma diferida.
Quitar los SDKs heredados y las bibliotecas de terceros sin usar fue la principal prioridad, ya que fue una tarea que requiere poco esfuerzo y gran ganancia. Este enfoque ayudó a Zomato a ahorrar un valioso 20% en el tiempo de inicio de la app.
Muchas bibliotecas de terceros usan proveedores de contenido para inicializarse cuando se inicia la app, lo que afecta su tiempo de inicio. Zomato usa el SDK de Facebook para acceder, pero el usuario también tiene otras opciones de acceso, por lo que inicializar el SDK durante el inicio no es eficiente. Con la introducción de la biblioteca de App Startup, Zomato solo carga el SDK si el usuario utiliza la opción de acceso con Facebook. Esto los ayudó a reducir el tiempo de inicio en aproximadamente un 6%.
El siguiente paso fue mejorar el tiempo de aumento de las vistas, ya que la renderización y el aumento de la vista en sí pueden llevar mucho tiempo en una estructura de IU compleja como la de Zomato. Viewstub ayuda a aumentar la eficiencia, ya que permite que se creen vistas, pero no se agreguen a la jerarquía de vistas, a menos que sea necesario. Los Viewstubs son más eficientes que los elementos View. Como si la vista estuviera en el estado GONE o no, se inflará y consumirá memoria y uso de CPU. Zomato aplanó su jerarquía de vistas y combinó diseños junto con viewstubs en su actividad de acceso. Estos cambios mejoraron significativamente el tiempo de inflación en un 7%.
El generador de perfiles de Android ayudó a optimizar el uso de la memoria, ya que permite realizar el seguimiento de la actividad de la CPU, la memoria y la red en tiempo real. El generador de perfiles les permitió identificar el problema raíz de las situaciones de bloqueo y la sobrecarga de memoria, y solucionarlo según corresponda. Zomato también trabajó en su mecanismo de almacenamiento en caché para lograr una caída masiva del 60% de los problemas de falta de memoria.
Acción | Antes (s) | Después (s) | Mejora |
---|---|---|---|
Se quitaron los SDKs heredados y las bibliotecas de terceros sin usar. | 4,873 | 3,813 | 21,74% |
Carga diferida de bibliotecas | 3,814 | 3,577 | 6.2% |
Mejoras de diseño, Viewstubs | 2,529 | 2,348 | 7,15% |
Tiempo de inicio de la app = Inicialización de la app + Tiempo de carga de las bibliotecas + Tiempo de aumento de vistas
Resultados
Las mejoras en el rendimiento de Zomato los ayudaron a crear una experiencia mucho más fluida. Gracias a las mejoras adicionales en la IU y al almacenamiento en caché, también se redujeron los bloqueos.
![](https://developer.android.com/static/images/distribute/stories/zomato.png?authuser=5&hl=es)
De la aplicación a la página de inicio (hacer clic en el ícono de la aplicación para acceder a una página de inicio completamente cargada y utilizable) es una métrica empresarial clave que Zomato realizó un seguimiento de forma interna. Después de que se implementaron las mejoras, notaron un aumento significativo en esta métrica. La cantidad de clientes que llegaron a una página completamente cargada aumentó en aproximadamente un 20% durante este período.
Esto condujo a una mejora de aproximadamente el 90% en la retención de clientes el primer día. Estas mejoras también tuvieron un efecto gradual en sus embudos de reenvío: la tasa general de pedidos totales (inicio -> menú -> carrito -> pedido) mejoró en aproximadamente 1.5 puntos porcentuales, es decir, alrededor de 600,000 pedidos mensuales.
Según la métrica de inicio en frío del rendimiento de Firebase, hubo una mejora promedio del 25% y, en los dispositivos de gama baja y media, la mejora en el tiempo de inicio en frío de la app alcanzó hasta un 30%.
El rendimiento del tiempo de inicio de la app es una métrica importante que afecta la percepción de los usuarios y las inversiones para optimizar el rendimiento también pueden tener un impacto significativo en el negocio.
“En Zomato, proporcionar y construir una experiencia del cliente increíble siempre fue el centro de nuestra ideología. Creemos que el rendimiento es uno de los impulsores clave y, por lo tanto, nuestro equipo se esforzó por lograr la excelencia en ingeniería para mejorar los tiempos de carga de las apps con las herramientas para desarrolladores de Google y obtuvo resultados sustanciales en tiempo real. Con esto, esperamos proporcionar una aplicación increíblemente rápida para las necesidades de pedidos en línea de la India y establecer un punto de referencia para nuestro desarrollo futuro".
— Sajal Gupta, gerente de Ingeniería de Zomato