En la superficie, SolidJS y React parecen estar estrechamente relacionados. Los marcos del lado del cliente son mutuamente inteligibles y ambos se utilizan para crear aplicaciones de una sola página (SPA). Si bien la experiencia del desarrollador es casi idéntica para ambos, los mecanismos subyacentes de cada marco son un contraste notable.
Ambos marcos SPA son responsables de compartimentar la estructura y la funcionalidad de la página internet de una aplicación, pero en un navegador, estos marcos manipulan los elementos HTML de las páginas de manera diferente para brindar la experiencia de usuario deseada. SolidJS y React difieren en su uso del Modelo de objeto de documento (DOM). Ampliemos cómo los componentes de React y SolidJS permiten que la lógica de la aplicación imite un sitio internet de varias páginas.
Una breve comparación
Creo firmemente en un enfoque TL; DR, por lo que he resumido y presentado las principales diferencias de React y SolidJS en la siguiente tabla:
Rasgo |
Reaccionar |
SolidJS |
---|---|---|
Compatibilidad con mecanografiado |
✔ |
✔ |
naturaleza declarativa |
✔ |
✔ |
Flujo de datos unidireccional |
✔ |
✔ |
Soporte JSX de primera clase |
✔ |
✔ |
Manipulación directa del DOM |
✘ |
✔ |
Evita el renderizado de componentes |
✘ |
✔ |
Alto rendimiento |
✘ |
✔ |
Rica comunidad y ecosistema |
✔ |
✘ |
Excelente documentación para desarrolladores. |
✔ |
✔ |
herramientas de andamio |
✔ |
✔ |
Representación condicional |
✔ |
✔ |
Representación del lado del servidor (es decir, hidratación) |
✔ |
✔ |
Representación simultánea (es decir, suspenso) |
✔ |
✔ |
Ahora entraremos en más detalles sobre las similitudes y diferencias entre React y SolidJS.
Estructura del componente
React y SolidJS tienen exactamente las mismas estructuras programáticas y soporte para componentes (piezas de código individuales y reutilizables).
Tanto en React moderno como en SolidJS, un componente consta de un render
función con propiedades como argumentos. Junto con cada componente JSX, el código es estricto y sucinto. JSX es fácil de asimilar y permite a los desarrolladores experimentados describir visualmente el modelo de un componente en su definición.
React y SolidJS ofrecen los mismos componentes, pero cada marco tiene un enfoque de representación único. Reaccionar componentes renderizar cada vez (salvo el uso de memorización), mientras que los componentes de SolidJS solo se renderizan una vez.
Otra diferencia entre los dos marcos son sus diferentes características que permiten la funcionalidad de los componentes.
Funcionalidad del componente
Un componente sin funcionalidad es solo marcado. Entonces, ¿cómo hacen React y SolidJS para que los componentes sean operativos? Sus enfoques son similares:
Rasgo |
Prefijo |
Descripción |
|
---|---|---|---|
Reaccionar |
Manos |
|
Estas son funciones destinadas a ejecutarse cuando el marco las activa en momentos específicos del ciclo de vida de un componente. Funciones de gancho son independientes entre sí, pero pueden llamar a otros ganchos desde dentro del mismo componente. Tales cadenas de llamadas permiten una funcionalidad más compleja y que el código se componga en subfunciones. |
SolidJS |
|
Estas son funciones cuyas API son similares a las de los ganchos. |
Debajo del capó, tanto los ganchos como las primitivas reactivas son una forma de conectarse a los respectivos sistemas de gestión de cambios React y SolidJS. En basic, los dos marcos manejan funciones componentes de manera related, pero emplean diferentes métodos o nomenclaturas para hacerlo.
Exploremos diferencias de funcionalidad más complejas: estado, memorización y efectos.
Expresar
A veces, un marco necesitará rastrear información y ciertas propiedades vinculadas a un componente. Este concepto se conoce como estado y se puede acceder en React con el useState
función. En SolidJS, este concepto se conoce como señal, y su función de creación correspondiente es createSignal
.
Indica y señala los datos de los componentes de la casa (en forma de accesorios), lo que permite que el marco realice un seguimiento de los cambios de valor. Y cuando el marco detecta un cambio, el componente se representa con los valores correspondientes.
Efecto
Un efecto es una función especial que es un bloque de construcción central tanto en React como en SolidJS. En lugar de responder a una interacción directa del usuario con el navegador, se activa un efecto cuando cambia el estado de un componente, related a una devolución de llamada o un detector de eventos.
React outline un efecto con el useEffect
mientras que SolidJS usa la función createEffect
función.
Memoización
La memorización optimiza el rendimiento del marco mediante el almacenamiento en caché de los costosos resultados de procesamiento de componentes y el uso de valores almacenados en caché cuando sea apropiado en lugar de volver a calcular los valores. En React, nosotros implementar memorización mediante el uso de uno de los tres ganchos:
Gancho de memorización |
Usado con |
---|---|
|
Componentes puros |
|
Componentes que se basan en accesorios de función |
|
Operaciones costosas y operaciones de componentes |
React depende de la memorización para que sus aplicaciones se rendericen rápidamente. Por el contrario, debido a su seguimiento de cambios optimizado y al uso de DOM, SolidJS rara vez requiere una memorización explícita. Para casos extremos en los que los cambios de accesorios de componentes no implican una actualización de renderizado, SolidJS administra la memorización a través de un único método llamado createMemo
.
Actuación
SolidsJS y React tienen diferencias de rendimiento que van más allá de sus enfoques de memorización. Los dos lenguajes abordan la manipulación de HTML de maneras muy diferentes. El punto focal de esta diferencia es cómo cada uno actualiza el DOM del navegador.
El fundador de React le dio un DOM digital liviano para interactuar con el DOM actual del navegador. El código de React hace que su propio DOM digital se actualice a medida que se procesan los componentes. React luego compara el DOM digital actualizado con el DOM del navegador, y los cambios identificados se traspasan a la estructura de la página actual (es decir, el DOM).
Podríamos argumentar que, debido a que React vuelve a renderizar los componentes de forma predeterminada, basándose en los cálculos de diferencia de DOM para las actualizaciones, React está haciendo su trabajo dos veces. Dado que renderiza componentes cada vez, React requiere memorización para evitar cálculos innecesarios y repetitivos.
Por el contrario, el fundador de SolidJS logró esquivar todo este viaje de ida y vuelta. Mediante un mecanismo llamado reactividad de grano fino para manipular directamente el DOM del navegador, SolidJS ofrece una huella de memoria mucho más ligera y una aplicación increíblemente rápida de ediciones de página y código inyectado.
La reactividad de grano fino sigue las interdependencias variables. En función de la dependencia de variables y las cadenas de edición, SolidJS limita las actualizaciones de la estructura de nuestra página para reflejar solo lo que ha cambiado, evitando renderizaciones de componentes innecesarias. Esto da como resultado una mejora masiva del rendimiento con respecto a React.
Aunque estoy tentado a terminar el artículo aquí y decir que SolidJS es el claro ganador debido a su rapidez, sigue siendo importante analizar cómo se comparan los dos marcos en términos de eficiencia del desarrollador.
Productividad del desarrollador
Hay algunas consideraciones clave cuando consideramos la productividad del desarrollador en React versus SolidJS:
Objetivo |
Reaccionar |
SolidJS |
---|---|---|
Identificación y seguimiento de las dependencias de los componentes |
✔ Etiqueta manualmente las dependencias de los componentes con useEffect. |
✔ Detecta y rastrea automáticamente las dependencias de los componentes. |
Destrucción de propiedades dentro |
✔ Admite esta función. |
✘ No es suitable con esta función de fábrica, pero esto proyecto de utilidad cierra la brecha. |
Uso de componentes de estado sin marcado |
✔ Requiere más secuencias de comandos para implementar un estado compartido entre varios componentes. |
✔ Admite esto de manera eficiente y nativa. |
Una revisión de los casos de uso específicos de su proyecto puede revelar qué marco es una mejor opción, en términos de productividad.
SolidJS frente a reaccionar
Tengo una experiencia appreciable tanto con SolidJS como con React. Desde mi perspectiva, SolidJS es el claro ganador de los dos. SolidJS coincide con la potencia y las características sólidas de React. Además, ofrece una capacidad de respuesta rápida a los usuarios finales que no tiene comparación con React.
Para Reaccionar desarrollador para ponerse al día con SolidJS, que aprovecha las lecciones, la estructura y los enfoques abstractos aprendidos durante la vida útil de React, casi no hay curva de aprendizaje. Le recomiendo que comience a usar SolidJS hoy mismo; puede ser el futuro de la interfaz de usuario.
El equipo editorial del Weblog de Ingeniería de Toptal extiende su agradecimiento a Yonatan Bendahan por revisar el contenido técnico presentado en este artículo.