La queja llegó por soporte: «la app tarda muchísimo en abrir desde el móvil». Tenía razón: 6,1 segundos hasta que se podía usar en un Android de gama media.
Medir antes de tocar#
Lo primero fue un perfil real con la red limitada, no con mi portátil. Tres cosas se comían el tiempo:
- Un paquete de JavaScript de 1,2 MB comprimido
- Una fuente de iconos de 380 KB que bloqueaba el primer pintado
- Una llamada a la API en cascada: datos → usuario → permisos
Lo que funcionó#
La fuente de iconos pasó a SVG en línea solo para los 14 iconos que usábamos. El paquete se dividió por rutas:
const Informes = lazy(() => import("./pages/Informes"));const Ajustes = lazy(() => import("./pages/Ajustes"));Y las tres llamadas en cascada se convirtieron en una sola en el servidor.
El resultado#
| Métrica | Antes | Después |
|---|---|---|
| JavaScript inicial | 1,2 MB | 310 KB |
| Primer pintado | 3,4 s | 0,9 s |
| Interactiva | 6,1 s | 1,4 s |
Nada de esto es nuevo. Lo único nuevo fue medir en el aparato que usa la gente.