it-swarm.com.de

Reduzieren Sie den Speicherverbrauch

Das Redux-Framework bevorzugt ein unveränderliches Zustands-/Funktionsfunktionsparadigma, das die Schaffung eines neuen Zustands aus dem vorherigen Zustand in Bezug auf die aktuelle Aktion fördert. Die Anwendbarkeit dieses Paradigmas ist unbestreitbar.

Ein Hauptanliegen von mir ist, dass, da die Redux-Reduzierer für jede aufgerufene Aktion eifrig neue Zustände aus früheren Zuständen zurückgeben, ein massiver Speicherverlust (nicht zu verwechseln mit Speicherlecks) in vielen realen Anwendungen häufig vorkommt . Wenn man bedenkt, dass Javascript-Anwendungen normalerweise in einem Browser auf Geräten eines durchschnittlichen Benutzers ausgeführt werden, auf denen auch mehrere andere gerätespezifische Anwendungen und mehrere weitere Browser-Registerkarten und -Fenster ausgeführt werden können, wird die Notwendigkeit, Speicherplatz zu sparen, immer offensichtlicher.

Hat jemand tatsächlich den Speicherverbrauch einer Redux-Anwendung mit der traditionellen Flux-Architektur verglichen? Wenn ja, könnten sie ihre Ergebnisse teilen?

23
000

Dies ist ein berechtigtes Anliegen. Obwohl ich die Speichernutzung von Redux-Anwendungen nicht gemessen habe, sollten Sie vor der Verwendung von Redux (oder einem anderen Framework) Stresstests erstellen, die die Datenmengen, die Änderungshäufigkeit und die Rechenintensität der von Ihnen verwendeten Anwendung emulieren werden bauen. Verwenden Sie diese Stresstests, bevor Sie technologische Entscheidungen darüber treffen, ob die Übernahme der Unveränderlichkeit in Ihrem speziellen Fall funktioniert.

Beachten Sie, dass Menschen manchmal über Redux verwirrt sind und davon ausgehen, dass der Statusbaum bei jeder Aktion tief geklont werden muss. Dies ist absolut nicht der Fall. Nur die Teile, die geändert wurden, müssen ihre Referenzen ändern. Wenn eine Aktion beispielsweise eine Änderung an einem Element in einem Array bewirkt, müssen dieses Element und das Array tatsächlich kopiert werden. jedoch Alle anderen Elemente im Array behalten ihre Identität. Da Aktionen in den meisten Fällen sehr zielgerichtet sind und einige Statusschlüssel betreffen und Redux die Normalisierung von Daten fördert, damit die Datenstrukturen nicht tief verschachtelt sind, ist dies für typische Webanwendungen weitaus weniger ein Problem, als man sich vorstellen kann.

Sie sollten auch Bibliotheken wie Immutable.js verwenden, die unveränderliche Listen und Karten effizient implementieren, indem Sie die strukturelle Freigabe intern verwenden. Auf diese Weise müssen einige Elemente in einer Liste nicht so oft kopiert werden, da intern der größte Teil des Speichers von verschiedenen Versionen der Datenstruktur gemeinsam genutzt wird.

Am Ende können Sie dies jedoch nur feststellen, indem Sie die Stresstests schreiben, die die beabsichtigte Verwendung Ihrer App genau nachahmen, und die Effizienz selbst messen.

30
Dan