Implementación Multiplataforma
Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →
Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →
Este documento hace referencia a la Nueva Arquitectura, que se está implementando activamente.
El renderizador de React Native utiliza una implementación central de renderizado para compartir entre plataformas
En el sistema de renderizado anterior de React Native, el Árbol de sombra de React, la lógica de diseño y el algoritmo de Aplanamiento de vistas se implementaban individualmente para cada plataforma. El renderizador actual fue diseñado como solución multiplataforma mediante una implementación central compartida en C++.
El equipo de React Native planea incorporar un sistema de animaciones al sistema de renderizado y extenderlo a nuevas plataformas como Windows, así como a sistemas operativos de consolas de juegos, televisores y más.
El uso de C++ para el núcleo del sistema de renderizado ofrece varias ventajas. Una única implementación reduce costos de desarrollo y mantenimiento. Mejora el rendimiento al crear árboles de sombra de React y calcular diseños porque se minimiza la sobrecarga de integrar Yoga con el renderizador en Android (es decir, ya no se usa JNI para Yoga). Finalmente, la huella de memoria de cada nodo de sombra de React es menor en C++ que si se asignara desde Kotlin o Swift.
El equipo también aprovecha características de C++ que imponen inmutabilidad para garantizar que no haya problemas relacionados con acceso concurrente a recursos compartidos pero no protegidos.
Es importante reconocer que el caso de uso del renderizador en Android aún incurre en costos de JNI por dos razones principales:
-
El cálculo de diseño para vistas complejas (ej.
Text,TextInput, etc.) requiere enviar props a través de JNI. -
La fase de montaje requiere enviar operaciones de mutación a través de JNI.
El equipo está explorando reemplazar ReadableMap con un nuevo mecanismo para serializar datos usando ByteBuffer para reducir la sobrecarga de JNI. Nuestro objetivo es reducir la sobrecarga de JNI en un 35-50%.
El renderizador proporciona dos vertientes en sus APIs de C++:
-
(i) para comunicarse con React
-
(ii) para comunicarse con la plataforma anfitriona
Para (i), React se comunica con el renderizador para renderizar un árbol de React y "escuchar" eventos (ej. onLayout, onKeyPress, toques, etc).
Para (ii), el renderizador de React Native se comunica con la plataforma anfitriona para montar vistas en pantalla (crear, insertar, actualizar o eliminar vistas) y escucha eventos generados por el usuario en dicha plataforma.
