Среда Redux поддерживает парадигму неизменяемого состояния / чистой функции, которая способствует созданию нового состояния из предыдущего состояния с точки зрения текущего действия. Применимость этой парадигмы бесспорна.
Моя главная проблема заключается в том, что, поскольку редукторы Redux с готовностью возвращают новые новые состояния из предыдущих состояний для каждого вызванного действия, массовая утечка памяти (не путать с утечками памяти) станет обычным явлением во многих реальных приложениях. , Если учесть, что приложения Javascript обычно запускаются в браузере на устройствах среднего пользователя, которые также могут запускать несколько других приложений, специфичных для данного устройства, и еще несколько вкладок и окон браузера, необходимость сохранения памяти становится все более очевидной.
Кто-нибудь на самом деле сравнивал потребление памяти приложением Redux с традиционной архитектурой Flux? Если да, могут ли они поделиться своими выводами?
Ответы:
Это действительная проблема. Хотя я не измерял использование памяти приложениями Redux, я думаю, что перед принятием решения использовать Redux (или любую другую платформу в этом отношении) вы должны создать стресс-тесты, которые эмулируют объемы данных, частоту изменений и интенсивность вычислений приложения, которое вы используете. собираются строить. Используйте эти стресс-тесты, прежде чем принимать технологические решения о том, работает ли неизменность в вашем конкретном случае.
Обратите внимание, что иногда люди путаются в Redux и считают, что при каждом действии дерево состояний должно быть глубоко клонировано. Это абсолютно не тот случай. Только части, которые изменились, должны изменить свои ссылки. Например, если действие вызывает изменение одного элемента в массиве, действительно, этот элемент и массив необходимо будет скопировать, однако все остальные элементы в массиве сохранят свои идентификаторы. Поскольку в большинстве случаев действия являются очень целенаправленными и затрагивают несколько ключей состояния, а Redux поощряет нормализацию данных, чтобы структуры данных не были глубоко вложенными, для типичных веб-приложений это гораздо меньше проблем, чем можно себе представить.
Вы также захотите изучить использование таких библиотек, как Immutable.js, которые эффективно реализуют неизменяемые списки и карты, используя внутреннее структурное совместное использование. Таким образом, изменение нескольких элементов в списке не требует большого количества копирования, поскольку внутренняя часть большей части памяти распределяется между различными версиями структуры данных.
Но, в конце концов, единственный способ сказать это - написать стресс-тесты, которые точно имитируют предполагаемое использование вашего приложения, и измерить эффективность для себя.
источник