5. Сравнение буфферов в mini-css-extract-plugin
Пожалуй, мой любимый пункт. Почему? Ну, потому что непонятно в чём проблема!
Точнее как, понятно как починить, а вот источник проблемы неизвестен.
В вебпаке у модулей есть метод updateCacheModule, служащий для инвалидации модулей. Т.е. внтури него можем сравнить какие-то параметры (например, содержимое модуля) и принять решение об инвалидации. На деле это строка типа
И тут мы подходим к самому интересному: мэйнтэйнеры вебпака сознательно написали такое сравнение, т.к. ожидается, что инстанс буффера будет один и тот же. А воспроизвести проблему получается только на CI. Причём если локально взять такой же докер-контейнер, то проблема уходит. В общем, весело.
Я обсуждал эту проблему с одним из мэйнтэйнеров, проблему вроде как воспроизвели и локализовали, и сошлись на том, что это рейс-кондишн, но пока что проблема остаётся актуальной. У себя в проекте мы просто запатчили mini-css-extract-plugin вот таким образом. А ишью я так и не создал, хотя стоило бы.
———
Такое вот весёлое приключение получилось. Так или иначе, для всех проблем нашлось решение и актуальными на текущий момент являются только 4 и 5 пункты.
Может возникнуть вопрос «а стоило ли это того?» и на мой взгляд да, более чем стоило.
Время сборки (при 100% кеш-хите):
приложение: с 252 секунд до 42 секунд — в 6 раз быстрее
сторибук: с 316 секунд до 58 секунд — в 5.5 раз быстрее.
Ну и здорово, что получилось локализовать и сообщить о багах, которые задевают многих пользователей вебпака.
Если хотите подробней почитать про кеш то вот две ссылки:
webpack.js.org/configuration/cache
github.com/webpack/changelog-v5/blob/master/guides/persistent-caching.md
P.S. Спасибо моему тимлиду Максу Леоньтеву за то что терпел и позволил довести работу до конца. И ребятам из webpack: Александру Акаит за консультации и Ивану Копейкину за фиксы багов.
———
Напоминаю, что вы можете заказать у меня как личные, так и корпоративные консультации по тулингу/CI.
Пожалуй, мой любимый пункт. Почему? Ну, потому что непонятно в чём проблема!
Точнее как, понятно как починить, а вот источник проблемы неизвестен.
В вебпаке у модулей есть метод updateCacheModule, служащий для инвалидации модулей. Т.е. внтури него можем сравнить какие-то параметры (например, содержимое модуля) и принять решение об инвалидации. На деле это строка типа
this.content === module.content
. Только вот content — это буффер, а буфферы правильно сравнивать вот так: this.content.equals(module.content)
.И тут мы подходим к самому интересному: мэйнтэйнеры вебпака сознательно написали такое сравнение, т.к. ожидается, что инстанс буффера будет один и тот же. А воспроизвести проблему получается только на CI. Причём если локально взять такой же докер-контейнер, то проблема уходит. В общем, весело.
Я обсуждал эту проблему с одним из мэйнтэйнеров, проблему вроде как воспроизвели и локализовали, и сошлись на том, что это рейс-кондишн, но пока что проблема остаётся актуальной. У себя в проекте мы просто запатчили mini-css-extract-plugin вот таким образом. А ишью я так и не создал, хотя стоило бы.
———
Такое вот весёлое приключение получилось. Так или иначе, для всех проблем нашлось решение и актуальными на текущий момент являются только 4 и 5 пункты.
Может возникнуть вопрос «а стоило ли это того?» и на мой взгляд да, более чем стоило.
Время сборки (при 100% кеш-хите):
приложение: с 252 секунд до 42 секунд — в 6 раз быстрее
сторибук: с 316 секунд до 58 секунд — в 5.5 раз быстрее.
Ну и здорово, что получилось локализовать и сообщить о багах, которые задевают многих пользователей вебпака.
Если хотите подробней почитать про кеш то вот две ссылки:
webpack.js.org/configuration/cache
github.com/webpack/changelog-v5/blob/master/guides/persistent-caching.md
P.S. Спасибо моему тимлиду Максу Леоньтеву за то что терпел и позволил довести работу до конца. И ребятам из webpack: Александру Акаит за консультации и Ивану Копейкину за фиксы багов.
———
Напоминаю, что вы можете заказать у меня как личные, так и корпоративные консультации по тулингу/CI.