El marco de Redux favorece el paradigma de estado puro / función inmutable, que promueve la creación de un nuevo estado a partir del estado anterior en términos de la acción actual. La aplicabilidad de este paradigma es indudable.
Una de las principales preocupaciones mías es que, dado que los reductores de Redux devuelven con entusiasmo nuevos estados nuevos de estados anteriores para cada acción invocada, el consumo masivo de memoria (que no debe confundirse con las pérdidas de memoria) se convertiría en una ocurrencia común en muchas aplicaciones del mundo real . Cuando se considera que las aplicaciones Javascript normalmente se ejecutan en un navegador en los dispositivos de un usuario promedio que también podrían estar ejecutando varias otras aplicaciones específicas del dispositivo y varias pestañas y ventanas más del navegador, la necesidad de conservar memoria se hace cada vez más evidente.
¿Alguien ha comparado realmente el consumo de memoria de una aplicación Redux con la arquitectura tradicional Flux? Si es así, ¿podrían compartir sus hallazgos?
Respuestas:
Esta es una preocupación valida. Si bien no he medido el uso de memoria de las aplicaciones de Redux, creo que antes de comprometerse a usar Redux (o cualquier otro marco para el caso) debe crear pruebas de estrés que emulen las cantidades de datos, la frecuencia de cambio y la intensidad de cálculo de la aplicación van a construir Utilice estas pruebas de resistencia antes de tomar decisiones tecnológicas sobre si adoptar la inmutabilidad funciona en su caso particular.
Tenga en cuenta que a veces las personas se confunden con Redux y suponen que en cada acción, el árbol de estado debe clonarse profundamente. Este absolutamente no es el caso. Solo las partes que cambiaron necesitan cambiar sus referencias. Por ejemplo, si una acción provoca un cambio en un elemento de una matriz, de hecho, ese elemento y la matriz deberán copiarse, sin embargo , todos los demás elementos de la matriz mantendrán sus identidades. Debido a que la mayoría de las veces las acciones son muy específicas y afectan algunas claves de estado, y debido a que Redux fomenta la normalización de datos para que las estructuras de datos no estén profundamente anidadas, este es un problema mucho menor para las aplicaciones web típicas de lo que uno podría imaginar.
También querrá explorar el uso de bibliotecas como Immutable.js que implementan listas y mapas inmutables de manera eficiente mediante el uso interno estructural. De esta manera, cambiar algunos elementos en una lista no implica tanta copia porque internamente la mayor parte de la memoria se comparte entre diferentes versiones de la estructura de datos.
Pero al final, la única forma de saberlo es escribir las pruebas de estrés que emulan de cerca el uso previsto de su aplicación y medir la eficiencia por usted mismo.
fuente