Комментарии 9
Все хорошо, только не проще ли тогда использовать computed сигнал? Мемоизация из коробки
Тоже имеет право на жизнь, но не всегда применимо. Например, в цикле в шаблоне.

Консоль лог вызывается снова, когда проверяются изменения в шаблоне.
Я бы в этом примере передал обработанный массив в цикл for. Как минимум не пришлось бы делать N вызовов метода внутри цикла. К тому же тут вообще ужасно создается каждый цикл новый сигнал. Когда они будут освобождены? Вообще на сколько помню сигналы можно создавать только внутри конструктора или контекста инъекции.
Код выше у меня синтетический, но при этом работает. Это просто пример того, что computed сигнал не универсальное решение.
На счёт предвычислений можно, конечно, но иногда есть ситуации, когда проще в шаблоне.
Я бы такое на ревью не пропустил. Все же, учитывая куда все движется, приспосабливаться к сигналам. Это поможет избежать ошибок “value was changed after checked” как минимум. Да я как ангулярщик со стажем (с самых первых версий) был немного скептичен к ним, но учитывая что у нас уже идут input output signals, то.. за ними будущее как и удаление zone.js :)
Это всё хорошо, но “value was changed after checked” никак не появится в моём решении. И это никак не касается зоны. Такие перерасчеты есть и при её удалении.
Input output signals пока всё же экспериментальные. И они не замена pipe. Такого позиционирования в документации не видел.
Нет, это не замена pipe, мне больше не нравится что функция вызывается в pipe трансформ и кэшируется для определенного значения + аргументов. Все же не экспериментальные, а уже developer preview.
в вашем примере нет, а найдется умник который в тяжелом вычислении сделает смену состояния.
Ну и извините, ради одного pipe который вызывает функцию в трансформ тащить зависимость?
в вашем примере нет, а найдется умник который в тяжелом вычислении сделает смену состояния.
Вот это можно как раз на ревью увидеть.
Ну и извините, ради одного pipe который вызывает функцию в трансформ тащить зависимость?
Почему нет, уменьшает бордерплейт. Не нужно создавать лишние одноразовые пайпы, а сразу использовать внешние функции утилиты или методы прямо из компонента.
https://stackblitz.com/edit/stackblitz-starters-mbkbwg
Не знаю, на мой взгляд сигналы выразительнее и не надо ничего тащить или писать.
P.s. Обратите внимание, я заменил пакет целым файлом в 10 строк.
Как улучшить производительность в Angular с помощью Memoize Pipe