Lección 2 de 20 · Lectura y práctica
Optimizar el rendimiento con Hermes y Metro
Concepto claveEn el desarrollo de aplicaciones móviles con Expo, el rendimiento es crítico para la experiencia del usuario. Hermes es un motor JavaScript optimizado específicamente para React Native que reemplaza el motor V8.
Del concepto a la práctica
Taller de esta lección
Aquí la optimización consiste en medir una ruta concreta, no en activar opciones al azar. Hermes es un motor de JavaScript usado por React Native; no debe describirse como sustituto general de V8. Metro determina cómo se resuelven y empaquetan los módulos; por eso conviene observar tamaño, tiempo de arranque y módulos duplicados por separado.
Ejemplo resuelto
Una pantalla de tareas importa un archivo de utilidades de 42 KB aunque solo usa una función. Se extrae esa función a un módulo pequeño y se revisan dos versiones instaladas de un paquete formateador. Importar dos veces el mismo módulo resuelto no duplica automáticamente todo su código; comprueba el árbol de dependencias y el paquete generado antes de atribuir una reducción. La comparación registra: paquete inicial antes, 1.20 MB; después, 1.08 MB. La reducción es 0.12 / 1.20 × 100 = 10%. La prueba se ejecuta con la misma lista de 100 tareas.
Pruébalo
Elige una pantalla medible, como la lista inicial.
Registra tamaño y tiempo de arranque antes del cambio.
Localiza una importación innecesaria o duplicada.
Repite la medición con los mismos datos.
Error frecuente: declarar que Hermes solucionó una pantalla lenta sin controlar el cambio de código. Corrígelo comparando una sola variable y conservando las mediciones.
Comprueba tu resultado
Entrega dos registros comparables y una fórmula. Se espera que la reducción calculada coincida con los valores anotados y que no se atribuya una mejora sin medición.

Mapa de prácticaUna condición decide qué camino ejecuta el programa. Un bucle repite una operación mientras queden elementos, y termina cuando la lista se agota. Separar ambas ideas ayuda a seguir el flujo y comprobar casos límite.
Ver la infografía en tamaño completo ↗Concepto clave
En el desarrollo de aplicaciones móviles con Expo, el rendimiento es crítico para la experiencia del usuario. Hermes es un motor JavaScript optimizado específicamente para React Native que reemplaza el motor V8 predeterminado, mientras que Metro es el bundler que gestiona la compilación y empaquetado de tu código. Juntos, forman un dúo poderoso para optimizar aplicaciones.
Imagina que tu aplicación es una fábrica: Hermes es el sistema de producción optimizado que ensambla componentes más rápido y con menos recursos, mientras que Metro es el sistema logístico que organiza y entrega las piezas justo a tiempo. Sin estas optimizaciones, tu fábrica trabajaría de manera ineficiente, consumiendo más energía y produciendo resultados más lentos.
La clave está en que Hermes ejecuta bytecode precompilado en lugar de interpretar JavaScript en tiempo real, reduciendo significativamente el tiempo de inicio y el uso de memoria. Metro, por su parte, implementa caching inteligente y tree-shaking para eliminar código innecesario. Para desarrolladores avanzados, dominar estas herramientas significa pasar de "funciona" a "funciona excelente".
Cómo funciona en la práctica
La implementación de Hermes y la optimización de Metro siguen un flujo estructurado. Primero, verifica si tu proyecto de Expo ya usa Hermes revisando el archivo app.json. Luego, configura Metro para maximizar su eficiencia mediante ajustes en metro.config.js.
Paso 1: Activa Hermes en tu proyecto. En app.json, bajo la sección expo, asegúrate de que "jsEngine": "hermes" esté presente. Para proyectos con SDK 49 o superior, esto viene activado por defecto, pero siempre es bueno verificarlo.
Paso 2: Optimiza Metro. Crea o modifica metro.config.js en la raíz de tu proyecto. Aquí puedes ajustar parámetros como maxWorkers para usar más núcleos del CPU, habilitar resetCache para builds limpios, y configurar cacheStores para mejorar el rendimiento en CI/CD.
Paso 3: Mide el impacto. Usa herramientas como expo start --profile para generar reportes de rendimiento, o integra react-native-performance para métricas en tiempo real. Compara métricas antes y después: tiempo de inicio (TTI), uso de memoria (RAM), y tamaño del bundle.
Codigo en accion
Aquí tienes un ejemplo funcional de configuración avanzada. Primero, el estado inicial típico de un proyecto sin optimizaciones:
// app.json sin Hermes explícito (predeterminado en SDK antiguos)
{
"expo": {
"name": "MiApp",
"slug": "miapp",
"version": "1.0.0",
"orientation": "portrait"
}
}Después de activar Hermes y optimizar Metro:
// app.json con Hermes activado
{
"expo": {
"name": "MiApp",
"slug": "miapp",
"version": "1.0.0",
"orientation": "portrait",
"jsEngine": "hermes"
}
}
// metro.config.js optimizado
const { getDefaultConfig } = require('expo/metro-config');
const config = getDefaultConfig(__dirname);
config.maxWorkers = 4; // Usa 4 núcleos para builds más rápidos
config.resetCache = true; // Fuerza un cache limpio en cada build
config.cacheStores = [
(type) => new FileStore({
root: path.join(__dirname, 'node_modules', '.cache', 'metro', type)
})
]; // Cache personalizado para entornos CI
config.transformer = {
...config.transformer,
minifierConfig: {
compress: {
drop_console: true, // Elimina console.log en producción
reduce_vars: true
}
}
}; // Minificación agresiva
module.exports = config;Errores comunes
- No verificar la compatibilidad de Hermes: Algunas librerías nativas pueden no ser compatibles con Hermes. Siempre prueba en un entorno de staging antes de producción.
- Sobrecargar maxWorkers: Configurar
maxWorkersmás allá de los núcleos disponibles de tu máquina puede ralentizar el build. Usaos.cpus().lengthpara un valor óptimo. - Ignorar el cache de Metro: No limpiar el cache periódicamente puede causar builds inconsistentes. Programa limpiezas automáticas en tu pipeline de CI/CD.
- Minificar en desarrollo: Habilitar minificación en desarrollo dificulta el debugging. Usa
drop_console: falseen entornos de desarrollo. - No medir el impacto: Implementar optimizaciones sin métricas es como volar a ciegas. Integra herramientas de profiling desde el inicio.
Checklist de dominio
- Hermes está activado en
app.jsoncon"jsEngine": "hermes". - Metro configurado con
maxWorkersajustado a los núcleos de tu sistema. - Cache de Metro gestionado: limpio en CI, persistente en local.
- Minificación agresiva habilitada solo en producción (
drop_console: true). - Bundle analizado con herramientas como
expo-build-propertiespara tamaño óptimo. - Métricas de rendimiento (TTI, RAM) documentadas antes/después de optimizaciones.
- Pruebas de compatibilidad de librerías nativas con Hermes realizadas.
Optimiza una app existente con Hermes y Metro
En este ejercicio, tomarás una aplicación Expo existente y aplicarás optimizaciones de rendimiento usando Hermes y Metro. Sigue estos pasos:
- Clona o usa tu propio proyecto Expo (SDK 49 o superior).
- Verifica si Hermes está activado en
app.json. Si no, actívalo añadiendo"jsEngine": "hermes". - Crea un archivo
metro.config.jsen la raíz del proyecto con optimizaciones: ajustamaxWorkers, habilitaresetCache, y configura minificación para producción. - Ejecuta
expo start --profiley genera un reporte de rendimiento antes de los cambios. - Construye la app con
expo prebuildy mide el tiempo de build y tamaño del bundle. - Aplica las optimizaciones, repite el paso 4 y 5, y compara los resultados.
- Documenta las mejoras en un archivo
OPTIMIZATIONS.mdcon métricas específicas.
Pistas
- Usa
os.cpus().lengthen Node.js para determinar un valor óptimo de maxWorkers. - Para medir el tamaño del bundle, revisa la carpeta
android/app/buildoios/builddespués de prebuild. - Si encuentras errores de compatibilidad, desactiva temporalmente Hermes para debuggear y verifica la documentación de las librerías.
Evalua tu comprension
Completa el quiz interactivo de arriba para ganar XP.
Sigue con Desarrollo Avanzado de Aplicaciones con Expo: De Concepto a Producción
Esta lección forma parte de un curso de Cursalo. Revisa su programa y elige entre la compra individual o el acceso a toda la escuela.
Si ya tenías acceso a este curso, entra con tu cuenta: tus derechos y tu progreso se conservan. No necesitas comprarlo de nuevo.