A estrutura Redux favorece o paradigma imutável de estado / função pura, que promove a criação de um novo estado a partir do estado anterior em termos da ação atual. A aplicabilidade desse paradigma é indubitável.
Uma grande preocupação minha é que, à medida que os redutores do Redux retornam ansiosamente novos estados de estados anteriores para cada ação invocada, um grande consumo de memória (que não deve ser confundido com vazamentos de memória) se tornaria uma ocorrência comum em muitas aplicações do mundo real . Ao considerar que os aplicativos Javascript normalmente são executados em um navegador nos dispositivos de um usuário comum, que também pode estar executando vários outros aplicativos específicos do dispositivo e várias outras guias e janelas do navegador, a necessidade de economizar memória se torna cada vez mais evidente.
Alguém já comparou o consumo de memória de um aplicativo Redux à arquitetura tradicional do Flux? Em caso afirmativo, eles poderiam compartilhar suas descobertas?
Respostas:
Esta é uma preocupação válida. Embora eu não tenha medido o uso de memória dos aplicativos Redux, acho que antes de se comprometer a usar o Redux (ou qualquer outra estrutura), você deve criar testes de estresse que simulem as quantidades de dados, alterem a frequência e a intensidade de computação do aplicativo vão construir. Use esses testes de estresse antes de tomar decisões tecnológicas sobre se a adoção da imutabilidade funciona no seu caso específico.
Observe que às vezes as pessoas ficam confusas sobre o Redux e assumem que, a cada ação, a árvore de estados precisa ser clonada profundamente. Este não é absolutamente o caso. Somente as partes que foram alteradas precisam alterar suas referências. Por exemplo, se uma ação causar uma alteração em um item de uma matriz, esse item e a matriz precisarão ser copiados; no entanto , todos os outros elementos da matriz manterão suas identidades. Como na maioria das vezes as ações são muito direcionadas e afetam algumas chaves de estado, e porque o Redux incentiva a normalização de dados para que as estruturas de dados não sejam profundamente aninhadas, isso é muito menos um problema para aplicativos da Web típicos do que se poderia imaginar.
Você também desejará explorar o uso de bibliotecas como o Immutable.js, que implementam listas e mapas imutáveis de forma eficiente, usando o compartilhamento estrutural internamente. Dessa forma, alterar alguns itens de uma lista não envolve muita cópia, porque internamente a maior parte da memória está sendo compartilhada entre diferentes versões da estrutura de dados.
Mas, no final, a única maneira de saber é escrever os testes de estresse que simulam de perto o uso pretendido do seu aplicativo e medir a eficiência por si mesmo.
fonte