Неизменность приходит не за счет скорости? - PullRequest
1 голос
/ 18 апреля 2020

Я не знаю, почему я не могу найти ответ на этот вопрос, но, поскольку управляющие штатами требуют неизменности, разве это не приводит к значительному снижению производительности для крупных штатов? Я создаю приложение для развлечения, у которого не было бы массивов, достаточно больших, чтобы вызвать проблему (n может составить около тысячи или около того, может быть, в крайнем случае, пару тысяч).

Но, давайте скажем, что приложение почему-то должно было хранить гигантский c запас информации в памяти по какой-то причине в состоянии. Каждый раз, когда вам нужно отредактировать один объект, это будет означать, что вы должны полностью восстановить массив.

Я просто думаю, что, возможно, в будущем мне понадобятся состояния, в которых хранится такой объем данных, хотя я не могу придумать конкретный пример, когда вам потребуется менеджер состояний для справиться с этим для вас. Мне просто любопытно, есть ли пример, когда случается эта странная гипотеза о наличии огромного государства. Кстати, единственная ссылка, которую я смог найти на неизменность, влияющую на скорость, - это увеличение ее, но это было на примечании равенства ссылок, используемого для сравнения. Но разве мутирующие данные не имеют ничего общего с тем, можете ли вы сравнить ссылку на объект или нет?

1 Ответ

0 голосов
/ 18 апреля 2020

Вы не понимаете, как работают неизменяемые обновления.

Правильное неизменяемое обновление не требует глубокого клонирования всех объектов. Это больше похоже на вложенный мелкий клон. Копируется только набор объектов, которые действительно должны быть обновлены, но не все.

Если я хочу обновить state.items[5].completed, мне нужно сделать копию объекта item с индексом 5, массив items и state. Все остальные объекты в массиве items и все другие разделы state остаются нетронутыми.

Конечно, копирование этих объектов обходится в определенную сумму, но по большей части это не имеет смысла если они не являются исключительно большими.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...