Hermes como motor predeterminado
Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →
En octubre pasado, anunciamos que comenzamos a trabajar para convertir a Hermes en el motor predeterminado para todas las aplicaciones de React Native.
Hermes ha aportado gran valor a React Native dentro de Meta, y creemos que la comunidad de código abierto también se beneficiará. Diseñado para dispositivos con recursos limitados, Hermes optimiza el inicio de la aplicación, el tamaño del binario y el consumo de memoria. Una diferencia clave frente a otros motores JavaScript es su capacidad para compilar código fuente a bytecode con anticipación. Este bytecode precompilado se incluye en el binario, evitando que el intérprete realice este paso costoso durante el arranque.
Desde ese anuncio, hemos trabajado intensamente para mejorar Hermes, y hoy nos complace compartir que React Native 0.70 incluirá Hermes como motor predeterminado. Esto significa que todos los nuevos proyectos iniciados con v0.70 tendrán Hermes activado por defecto. Con el lanzamiento previsto para julio, queremos colaborar estrechamente con la comunidad para garantizar una transición fluida que aporte valor a todos los usuarios. Este artículo detallará los cambios esperados, benchmarks de rendimiento, nuevas funcionalidades y más. No es necesario esperar a React Native 0.70 para usar Hermes: puedes seguir estas instrucciones para activarlo en tu aplicación existente.
Aunque Hermes estará activado por defecto en nuevos proyectos de React Native, continuaremos dando soporte a otros motores.
Pruebas de rendimiento
Medimos tres métricas clave para desarrolladores: TTI, tamaño del binario y consumo de memoria. Utilizamos la aplicación React Native Mattermost en dispositivos de gama alta de 2020 para Android e iOS.
-
TTI (tiempo hasta la interacción) es el lapso entre el lanzamiento de la app y el momento en que el usuario puede interactuar. Para esta prueba, lo definimos como el tiempo desde que se presiona el icono hasta que se renderiza la primera pantalla. Incluimos grabaciones del arranque de Mattermost.
-
El tamaño del binario se midió como APK en Android e IPA en iOS.
-
El consumo de memoria se recopiló usando Mattermost durante varios minutos, ejecutando las mismas acciones en ambos motores.
Datos de Android
Todas las pruebas de Android se realizaron en un Samsung Galaxy S20.

Video del TTI

Datos de iOS
Todas las pruebas de iOS se realizaron en un iPhone 12 Pro.

Video del TTI

Video del TTI ralentizado para apreciar mejor la diferencia en tiempo de arranque

Integración React Native/Hermes
Solucionamos un problema recurrente que causaba incompatibilidades al lanzar nuevas versiones: React Native dependía de binarios precompilados de Hermes distribuidos vía CocoaPods y npm, lo que podía generar incompatibilidades de API o ABI. A partir de React Native 0.69, Hermes se compila junto con cada versión de React Native, garantizando compatibilidad total. Esta integración más estrecha permite iteraciones más rápidas para desarrollar funcionalidades o corregir errores, y nos da mayor confianza al implementar cambios importantes en Hermes. Más detalles sobre este cambio aquí.
Intl en iOS
Hemos completado la implementación para iOS de Intl, la API de Internacionalización de ECMAScript que proporciona amplias funcionalidades sensibles al idioma. Esta era una brecha prolongada que impedía que algunos desarrolladores usaran Hermes. La implementación para Android, realizada en colaboración con Microsoft, se incluyó en React Native 0.65. Con React Native 0.70, los desarrolladores tendrán soporte nativo en ambas plataformas.
Las implementaciones típicas de Intl requieren importar grandes tablas de búsqueda o datos como Unicode CLDR. Sin embargo, esto puede aumentar el tamaño hasta 6MB, por lo que para evitar inflar el tamaño binario de Hermes, implementamos Intl llamando a las API expuestas por el propio iOS. Esto nos permite aprovechar todos los datos de localización e internacionalización que ya incluye iOS.
Trabajo en curso
Mientras seguimos evolucionando Hermes, queremos compartir nuestras prioridades inmediatas: mejorar la experiencia del desarrollador y garantizar que nadie evite usar Hermes por falta de características del lenguaje JavaScript. Específicamente, estamos:
-
Habilitando que los desarrolladores ejecuten el sampling profiler directamente desde la UI de Chrome DevTools.
-
Añadiendo soporte para
BigInt, una solicitud recurrente de la comunidad que podría impedir el uso de Hermes al no poder implementarse mediante polyfills. -
Implementando soporte para
WeakRef, lo que expondrá nuevos controles de gestión de memoria a los desarrolladores.
Conclusión
Que Hermes sea el motor predeterminado marca el inicio de un camino a largo plazo. Estamos trabajando en nuevas características que permitirán a la comunidad crear aplicaciones eficientes durante muchos años. También animamos a la comunidad a compartir en nuestro repositorio de GitHub cualquier error, pregunta, comentario o idea. Hemos creado una etiqueta hermes para publicaciones específicas sobre Hermes.
