tgoop.com/smelukov_dev/95
Last Update:
На сколько эффективен формат статов вебпака?
Ужасно неэффектифен, потому что данные в статах денормализованы (почти).
Из-за этого, отчет со сравнением и валидацией сборок фиче-ветки и мастер-метки может занимать 4-5 гб (в нашем случае было именно так).
Это делает проблематичным просмотр отчета, потому что HTML очень большой. Супер-классный парсер от Романа Дворнова его спокойно прожует, а вот браузер уже с трудом и в зависимости от ресурсов вашего устройства, вкладка либо будет очень долго открываться, либо будет бесконечно крашиться, ну и места такой отчет на CI займет не мало, на каждый ПР. В результате чего к вам могут прийти ваши DevOps с вопросов вроде "Вы что, используете наш CI как хранилище фильмов? 😑"
Сегодня ночью я решил эту проблему и UI-отчет теперь очень сильно уменьшился в размере.
Например, отчет на 4-5 гб уменьшился до 250мб (в 15 раз!) и открывается за 15 секунд (от момента когда браузер запустился, до момента когда уже можно смотреть отчет).
Это стало возможным благодаря нормализации статов вебпака до того как записать их в отчет.
Грубо говоря, я составил карту всех возможных модулей в статах, вынес их в отдельное служебное поле статов и заменил места их использования порядковыми номерами. В просмотрщике отчетов я сделал обратное преобразование и.... собственно всё 🙂
Кстати, статы вебпака неспроста денормализованы.
Дело в том, что каждый чанк содержит информацию о модулях внутри него и если одни и те же модули используются в разных чанках, то они будут продублированы в статах для каждого чанка, с небольшими отличиями, например, поле chunks
в модуле, который находится в чанке foo
, будет равно ["foo"]
. И так для каждого чанка, внутри которого содежрится этот модуль. А если у вас сотни чанков и тысячи модулей? 😉
В итоге я решил просто помержить содержимое полей chunks
от одних и тех же модлей в разных чанках, таким образом получив один модуль, который содержит инфо о чанках, в которых он используется и это ничего не ломает.
ПР можно посмотреть тут, а changelog релиза 5.8.0 здесь
BY Сергей Мелюков
Share with your friend now:
tgoop.com/smelukov_dev/95