Rose debug info
---------------

Подписаться на блог

Фиды

Рассылка

Как babel-плагин замедлил приложение в 2 раза

TL;DR: в @babel/plugin-transform-classses есть баг, который вызывает падение перформанса.

Вчера всплыла неожиданная проблема, которая изначально звучала как «часть приложения работает медленнее после оптимизаций сборки проекта». Перформанс панель показывала неутешительные результаты, причем, посмотрев на коллстек, найти даже минимальную зацепку я не смог.

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

С ними в проекте недавно была проведена работа по дедубликации лок-файла и дерева зависимостей, вместе с чем обновились некоторые библиотеки. Минус 7000 строк лока, разбор проблемы обещал быть веселым.

Из-за отсутствия зацепок исследование проводилось методом исключения, благо, модули babel были близко к началу очереди.

Проблему искал сначала мой коллега, затем я. Не знаю, сколько времени на это было потрачено, но причиной оказался один плагинчик — @babel/plugin-transform-classses. Откатил версию, зафиксировал ее, и все заработало.

Сейчас разбираться, че там внутри плагина поменялось мне лень, конечно, но когда-нибудь обязательно покопаю, когда-нибудь.

Как оказалось, с 1 апреля 2020 года в репозитории есть репорт этой проблемы — babel#11356.

В нашем случае замедление было в среднем в 2+ раза. Некоторым повезло меньше, после обновления Angular можно поймать и более ощутимые просадки.

Картинка из обсуждения в репозитории Angular'а

В очередной раз поймал себя на мысли, что в 2021 году babel уже не нужен. Пора начать выпиливать его из проектов!

Сейчас придумал теорию заговора, что babel так с адептами ООП борется просто.
Как там было? Если хочешь, чтобы перестали использовать deprecated метод, добавь в него sleep.

7 мес   development   javascript   react