Почему нарезка - это нечистая труба? - PullRequest
0 голосов
/ 11 сентября 2018

Я всегда считал, что slice чисто, и его единственным преимуществом перед вызовом slice метода для строки или массива является механизм кэширования чистых каналов в Angular.

Оказывается, это неслучай и slice нечист.Более того, реализация очень проста: она защищает от null s и делегирует методу slice.Нет внутреннего сравнения последнего преобразованного входа.

Я подозреваю, что он предназначен для соответствия поведению ngFor, но является ли это жизнеспособной причиной?Новички будут жаловаться, что Angular не работает в противном случае, я полагаю, но опять же, зачем мне использовать этот канал?

Правильно ли я понимаю, что он создает новые массивы при каждом запуске обнаружения изменений, что приводит кзапускать даже OnPush обнаружение изменений на три и сводить на нет оптимизацию производительности?

Редактировать: Этот вопрос основан на предположении, что следует использовать неизменные данные.

1 Ответ

0 голосов
/ 11 сентября 2018

Этот канал нечист, поскольку в противном случае он будет возвращать тот же результат, пока не изменится ссылка на массив, поэтому он не будет работать при изменении элементов массива.

Лично я считаю, что использовать такие трубы - плохой дизайн. Они удалили FilterPipe из-за проблем с производительностью. Действительно, канал запускается при каждом обнаружении изменений, а их много! Я думаю, что труба среза должна быть также удалена. Для меня это быстрое и грязное решение, которое приносит больше проблем, чем решает.

Я предлагаю вам нарезать свои массивы самостоятельно, когда это необходимо.

...