Не пишите квадраты
Степан Зубашев критикует современные тренды написания JavaScript-кода — "Обращение к Javascript-сообществу: перестаньте писать квадраты".
Популярность функциональных методов для работы с массивами и современные фичи JavaScript открыли двери для очень лаконичного кода. Но иногда чрезмерное увлечение лаконичностью приводит к падению производительности. В статье на примере использования .concat()
внутри .reduce()
рассказывается, почему это может оказаться серьёзной проблемой.
source.reduce(
(acc, item) => acc.concat(func(item)),
[]
);
В данном случае на каждую итерацию происходит копирование всех элементов старого массива в новый, который возвращается .concat()
. Создание нового массива происходит для каждого элемента source
, таким образом сложность кода получается квадратичной. С подобной проблемой столкнулись разработчики из вчерашней статьи.
Степан призывает не ставить в абсолют краткость кода и задумываться о производительности.