Forwarded from Defront — про фронтенд-разработку и не только (Alexander Myshov)
Поиск причины деградации времени сборки Webpack 5
Оуэн Хэннесси поделился историей поиска бага, из-за которого время запуска dev-сервера Webpack замедлилось в пятнадцать раз — "Understanding why our build got 15x slower with Webpack 5".
Проблема возникла после добавления невинной тёмной темы. Первые подозрения упали на CSS-in-JS-библиотеку Linaria. С помощью профилировщика внутри библиотеки была найдена проблемная функция, в которой использовался метод массива
В V8 у метода
#v8 #performance #webpack
https://engineering.tines.com/blog/understanding-why-our-build-got-15x-slower-with-webpack
Оуэн Хэннесси поделился историей поиска бага, из-за которого время запуска dev-сервера Webpack замедлилось в пятнадцать раз — "Understanding why our build got 15x slower with Webpack 5".
Проблема возникла после добавления невинной тёмной темы. Первые подозрения упали на CSS-in-JS-библиотеку Linaria. С помощью профилировщика внутри библиотеки была найдена проблемная функция, в которой использовался метод массива
.concat()
. Переписывание кода без использования .concat()
решило проблему. Однако оставались вопросы, из-за того что в оригинальном коде просадки скорости не было при сборке проекта с помощью Webpack 4. Надо было исследовать исходники V8.В V8 у метода
.concat()
есть две ветки выполнения кода — медленная и быстрая. Медленная ветка начинает работать в том случае, если движок хотя бы один раз устанавливал Symbol.isConcatSpreadable
. В Webpack 5 это происходило в коде, отвечающем за обратную совместимость с четвёртой версией. Для решения проблемы разработчики Webpack добавили экспериментальную опцию backCompat
, которая полностью отключает обратную совместимость, избавляясь от ещё большего количества проблемного кода.#v8 #performance #webpack
https://engineering.tines.com/blog/understanding-why-our-build-got-15x-slower-with-webpack
Tines
Understanding why our build got 15x slower with Webpack 5 | Tines
A while back, we encountered an odd problem. All of a sudden, building our front-end went from taking a few seconds to taking a few minutes. We felt this most acutely when starting our front-end development server.