Обложка канала

Defront (при поддержке Зарплата.ру) — про фронтенд-разработку и не только

6354 @defront

Канал про фронтенд-разработку и не только. Небольшие посты и короткие пересказы статей, приправленные авторским мнением. Ведёт канал Александр Мышов из Яндекс.Маркета.

Defront (при поддержке Зарплата.ру) — про фронтенд-разработку и не только

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

Disclaimer: в этой статье будет очень много бредовых примеров и сверх очевидных утверждений. Если для вас предельно очевидно, что ... внутри .reduce даёт вам O(n^2), то можно сразу прыгать к разделу...

Хабр