Hermes: características y optimización para React Native

Autor: IT Sectr Publicado: 2026-06-04 Tiempo de lectura: 9 min

Hermes es un motor JavaScript de código abierto desarrollado específicamente para React Native y optimizado para dispositivos móviles. A diferencia de JavaScriptCore, Hermes precompila el código JS en bytecode durante la fase de compilación, garantizando un inicio rápido de la aplicación. Según Meta, Hermes Docs, 2024, Hermes se usa por defecto en React Native a partir de la versión 0.70.

Puntos clave

  • Hermes — un motor JavaScript de Meta, optimizado para React Native.
  • Bytecode — el código JS se compila anticipadamente durante la fase de compilación de la app.
  • Velocidad de inicio — la ausencia de compilación JIT reduce el tiempo de arranque en un 50%.
  • Memoria — Hermes consume entre un 30 y un 40% menos de memoria que JSC.
  • Por defecto — se usa en React Native 0.70+ para todos los proyectos nuevos.

¿Qué es Hermes?

Hermes es un motor JavaScript compacto creado por el equipo de Meta específicamente para React Native. Se anunció en 2019 como alternativa a JavaScriptCore (JSC), que se usaba por defecto en React Native. El objetivo principal de Hermes es proporcionar el inicio más rápido posible para aplicaciones móviles, especialmente en Android con recursos limitados.

La característica clave de Hermes es la compilación anticipada (AOT — Ahead-of-Time). A diferencia de los motores JS tradicionales que compilan código en tiempo de ejecución (JIT — Just-in-Time), Hermes compila JavaScript en bytecode durante la fase de compilación de la app. Esto significa que no se realiza compilación en el dispositivo: el bytecode se ejecuta inmediatamente por la máquina virtual de Hermes.

Hermes no es un motor JS universal: está optimizado exclusivamente para escenarios de React Native. Carece de funcionalidades no necesarias en el desarrollo móvil: eval, generadores y algunas características de ES6. Esto permite que el motor sea más compacto y rápido. Según Meta, el tamaño de Hermes es de aproximadamente 200–300 KB comprimido, significativamente menor que JSC (unos 2–3 MB).

Arquitectura de Hermes y bytecode

La arquitectura de Hermes se diferencia de los motores JS tradicionales por carecer de compilador JIT. En su lugar, Hermes utiliza una máquina virtual (VM) eficiente que ejecuta bytecode precompilado. Abandonar JIT proporciona tres ventajas clave: rendimiento predecible, menor consumo de memoria y reducción del tiempo de inicio.

El bytecode de Hermes es una representación compacta del código JavaScript optimizada para una ejecución rápida. Durante la fase de compilación (a través de Metro), los archivos JavaScript se compilan en archivos .hbc (Hermes Bytecode). La app carga estos archivos y la VM de Hermes los ejecuta sin compilación adicional. El proceso de compilación se integra en Metro mediante el plugin hermes-transformer.

Etapas del procesamiento de código

El flujo de procesamiento de JavaScript en Hermes consta de tres etapas: Parse — análisis sintáctico del código fuente, Compile — traducción a bytecode, Execute — ejecución del bytecode por la máquina virtual. Las dos primeras etapas se ejecutan durante la fase de compilación, la tercera en el dispositivo. Esto es fundamentalmente diferente de JSC, donde las tres etapas se ejecutan en el dispositivo.

bash
# Compilación de bytecode de Hermes durante la compilación
hermes -emit-binary -out index.hbc index.js

# Verificar el tamaño del bytecode generado
ls -lh index.hbc

# Mostrar estadísticas de bytecode
hermes -dump-bytecode index.hbc

# Optimizar bytecode para producción
hermes -O index.js -emit-binary -O target.hbc

Después de la compilación, todos los archivos .hbc se empaquetan en APK o IPA junto con el código nativo. Cuando la app se inicia, la VM de Hermes carga el bytecode y comienza la ejecución casi al instante: no se necesita tiempo de calentamiento JIT, típico de V8 y JSC.

Hermes vs JSC: comparativa

Comparar Hermes y JavaScriptCore (JSC) ayuda a entender cuándo elegir cada motor. JSC es un motor JS completo de Apple, utilizado en Safari. Hermes es un motor especializado para React Native. La elección entre ellos depende de las prioridades del proyecto.

CaracterísticaHermesJavaScriptCore
CompilaciónAOT (durante la compilación)JIT (en el dispositivo)
Tiempo de inicio50–100 ms200–400 ms
Consumo de memoria30–40% menosNivel base
Tamaño~250 KB (comprimido)~2 MB (comprimido)
Soporte ES6+LimitadoCompleto

Hermes gana en velocidad de inicio y consumo de memoria, pero queda detrás de JSC en rendimiento de cálculos complejos. La compilación JIT de JSC optimiza las rutas de código caliente durante la ejecución, lo que le da ventaja en operaciones intensivas de CPU. Para una app típica de React Native, donde las actualizaciones de UI y la navegación constituyen la carga de trabajo principal, Hermes proporciona una mejor experiencia de usuario gracias a su inicio rápido.

Optimizaciones de Hermes para React Native

Hermes incluye varias optimizaciones específicas para React Native. La principal es la integración con JSI (JavaScript Interface). Hermes soporta JSI de forma nativa, permitiendo usar la nueva arquitectura de React Native (Fabric + Turbo Modules) sin capas adicionales. Esto convierte a Hermes y la nueva arquitectura en el par ideal para el máximo rendimiento.

Gestión de memoria

Hermes utiliza un recolector de basura generacional (generational GC) optimizado para dispositivos móviles. A diferencia de JSC, donde la recolección de basura puede causar pausas notables en la UI (jank), Hermes realiza GC en pequeñas porciones entre fotogramas, minimizando el impacto en la experiencia del usuario. Según Meta, las pausas de GC en Hermes son 2–3 veces más cortas que en JSC en escenarios típicos de React Native.

Carga perezosa y constantes

Hermes soporta la carga perezosa de módulos: un módulo JavaScript se compila solo cuando realmente se necesita. Esto reduce el tamaño del bytecode y acelera el inicio. Además, Hermes evalúa expresiones constantes en tiempo de compilación, reemplazando llamadas a funciones con valores constantes cuando es posible.

js
// Ejemplo de optimizaciones específicas de Hermes

// 1. Hermes inlinea expresiones constantes
const TAX_RATE = 0.07;
const price = 100;
// Hermes precalcula: TAX_RATE * price durante la compilación
const totalWithTax = price * (1 + TAX_RATE);

// 2. Hermes optimiza cadenas de acceso a propiedades
const config = { api: { timeout: 5000 } };
// Hermes almacena en caché el acceso a config.api internamente
const timeout = config.api.timeout;
fetch(url, { timeout });

Es importante destacar que Hermes soporta la depuración a través de Chrome DevTools (a partir de Hermes 0.12). Los desarrolladores pueden usar herramientas familiares: puntos de interrupción, perfilado de memoria, inspección de variables. Esto elimina una de las principales objeciones a Hermes en versiones tempranas, donde la depuración era limitada.

Configuración de Hermes en un proyecto React Native

La configuración de Hermes depende de la versión de React Native. A partir de React Native 0.70, Hermes está habilitado por defecto para nuevos proyectos. Para proyectos creados anteriormente, o al cambiar entre motores, la configuración se realiza a través de los ajustes de compilación.

Configuración para Android

Para Android, Hermes se habilita en el archivo android/app/build.gradle mediante la bandera hermesEnabled. Para iOS, la configuración se realiza en el Podfile mediante la variable :hermes_enabled. Después de cambiar la configuración, es necesario reinstalar los pods y recompilar el proyecto.

groovy
// android/app/build.gradle — habilitar Hermes
project.ext.react = [
    enableHermes: true
]

// iOS Podfile — habilitar Hermes
hermes_enabled = true
pod 'hermes-engine'

Para verificar que Hermes se está ejecutando en tu app, ejecuta adb logcat | grep Hermes en Android o revisa la consola de Xcode en iOS. Al iniciar la app, Hermes muestra un mensaje como «Hermes VM initialized» o similar. También puedes comprobar globalThis.HermesInternal en el código JavaScript: si Hermes está activo, esta propiedad estará disponible.

js
// Verificar si Hermes está funcionando
if (typeof globalThis.HermesInternal !== 'undefined') {
  console.log('✅ Motor Hermes activo');
  console.log(
    'Versión:',
    globalThis.HermesInternal.getEngineProperties()
  );
} else {
  console.log('❌ Hermes no activo (fallback a JSC)');
}

Preguntas frecuentes

¿Funciona Hermes con la nueva arquitectura de React Native?

, Hermes es totalmente compatible con la nueva arquitectura de React Native (Fabric + Turbo Modules). Además, Hermes y JSI se desarrollaron conjuntamente y ofrecen el mejor rendimiento en pareja.

¿Se puede usar Hermes en iOS?

, Hermes soporta ambas plataformas: iOS y Android. En iOS, Hermes reemplaza el JavaScriptCore estándar, ofreciendo los mismos beneficios: inicio rápido y menor consumo de memoria.

¿Soporta Hermes todas las características de ES6+?

Hermes soporta la mayoría de las características de ES6+, pero con limitaciones: eval, generators y Proxy no están disponibles. Se recomienda usar transpilación con Babel para compatibilidad, como en React Native normal.

¿Cómo afecta Hermes al tamaño de la aplicación?

Hermes reduce el tamaño de la app gracias al bytecode compacto y al menor tamaño del motor. El bytecode suele ser entre un 20 y un 30% más compacto que el código JS equivalente, y el propio motor pesa ~250 KB frente a ~2 MB de JSC.

¿Qué hacer si una biblioteca no funciona con Hermes?

La mayoría de las bibliotecas son compatibles con Hermes. Si una biblioteca usa eval, Proxy o características no estándar, comprueba si tiene una versión compatible con Hermes. También puedes usar plugins de Babel para reemplazar construcciones no soportadas.

Resumen

  • Hermes — un motor JavaScript de Meta, optimizado para el inicio rápido de aplicaciones React Native.
  • Compilación AOT — el código JS se compila en bytecode durante la fase de compilación, eliminando la sobrecarga JIT en el dispositivo.
  • Rendimiento — el tiempo de inicio se reduce en un 50%, el consumo de memoria entre un 30 y un 40% en comparación con JSC.
  • Tamaño — Hermes ocupa ~250 KB (comprimido), de 8 a 10 veces menos que JSC.
  • Compatibilidad — Hermes soporta JSI y la nueva arquitectura de React Native, incluyendo Fabric y Turbo Modules.
  • Depuración — disponible a través de Chrome DevTools, incluyendo puntos de interrupción y perfilado.
  • Recomendación — usa Hermes para todos los proyectos React Native a partir de la versión 0.70+ para máximo rendimiento en dispositivos móviles.

Desarrollaremos una aplicación móvil llave en mano

IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.

Discutir el proyecto

Lea también