En el ámbito del desarrollo de aplicaciones móviles, React Native ha cambiado el juego, que ofrece una solución multiplataforma para construir aplicaciones nativas. Sin embargo, su rendimiento, particularmente en comparación con las aplicaciones de Swift o Kotlin, ha sido durante mucho tiempo un desafío. La introducción de Hermes, un motor JavaScript optimizado para React Native, ha remodelado el paisaje al abordar problemas críticos y mejorar significativamente el rendimiento. En este boletín, profundizamos en la evolución de React Native, las decisiones de diseño detrás de Hermes y el impacto a largo plazo que podría tener en React Native Development. Entendiendo JavaScriptcore (JSC): para apreciar Hermes, es crucial reconocer las deficiencias de su predecesor, JavaScriptcore (JSC). Un ejemplo de ello es la experiencia de Meta con la aplicación Facebook Marketplace, construida completamente con React Native. La aplicación enfrentó desafíos como los tiempos de carga lenta y el retraso debido a la ineficiente recolección de basura, lo que afectó la experiencia del usuario. La compilación de tiempo de ejecución de JSC se agregó a los problemas, lo que provoca la necesidad de una solución más eficiente. Aliminar los desafíos inherentes de React Native: Hermes aborda la falta de coincidencia entre el diseño nativo de React Native y el motor genérico de JSC al introducir una estrategia de compilación de anticipación con anticipación (AOT). A diferencia de JSC, que se compiló en el tiempo de ejecución (compilación JIT), Hermes realiza el trabajo pesado en el tiempo de compilación, mejorando significativamente el rendimiento de la aplicación. Entendiendo el nuevo flujo de Hermes: Hermes reestructura la tubería de JavaScript, enfatizando un cambio de tiempo de ejecución a tiempo de construcción. El proceso de compilación implica transpilación, minificación, análisis, generación de bytecode y ejecución. Al mover estos procesos al tiempo de construcción, Hermes optimiza el rendimiento y minimiza los retrasos en tiempo de ejecución. Debido a que JavaScript tiene varias características experimentales con algunas diferencias sintácticas, la transpilación transforma cualquier especificación arbitraria en la especificación objetivo. A menudo, los desarrolladores utilizarán nuevas funciones de JavaScript y luego traspolarán el código a una especificación anterior, utilizando productos como Babel. Minificación: la minificación encoge el paquete JavaScript cambiando las variables en nombres taquitrias de letras simples o dobles. Esto condensa drásticamente el tamaño del paquete eliminando cualquier código de exceso. El análisis implica varios subpasos, como (i) encontrar las llamadas de función, (ii) localizar las definiciones de funciones y (iii) optimizar la estructura de la función. Bytecode es un formato semi-legible de los humanos que se compila en instrucciones binarias para que el hardware físico o virtual se ejecute. Ejecución: Finalmente, el motor JavaScript ejecuta ese bytecode. El trabajo restante es manejado por el sistema operativo y el hardware. Cómo Hermes logra la compilación de AOT: Hermes logra la compilación AOT a través de un proceso de varios pasos, compilando JavaScript en la representación intermedia de asignación única estática (SSA IR) y la optimiza aún más en el by-código específico del dispositivo. Este enfoque meticuloso da como resultado tamaños de paquetes más pequeños en dispositivos de Android, contribuyendo a un mejor rendimiento. El recolector de basura Hermes, Hades: Hermes presenta un nuevo coleccionista de basura, Hades, que revisa el GenGC original utilizado por JSC. Hades corre simultáneamente con el hilo del intérprete principal, evitando el efecto «detener el mundo». Aunque libera la memoria más lentamente, su precisión y su impacto reducido en la experiencia del usuario lo convierten en una mejora sustancial. ¿Cuál es el exitoso Hermes?: Los puntos de referencia de Meta muestran resultados impresionantes, con disminuciones significativas en el tiempo para interactuar (TTI), el tamaño de la construcción y la utilización de la memoria tanto en Android como en iOS. Hermes ha obtenido una adopción generalizada, incluidos marcos como Expo, y la compatibilidad con las populares bibliotecas de gestión estatales como MOBX e Immer. Se han agregado o mejorado características como Async/Await, Bigint, WeakRef, Proxy y Reflex. Aunque algunos elementos permanecen sin apoyo, a menudo tienen un impacto mínimo en el desarrollo nativo React. Hermes representa un momento fundamental para React Native, marcando un compromiso para priorizar las ventajas nativas sobre la semántica centrada en el navegador de JavaScript. El éxito del motor en mejorar significativamente las posiciones de las métricas de rendimiento reaccionan como un contendiente formidable para construir aplicaciones complejas. A medida que la comunidad nativa React abraza a Hermes, el futuro tiene posibilidades emocionantes para el desarrollo móvil de alto rendimiento y multiplataforma.