TGViewer
Сергей Мелюков Сергей Мелюков @smelukov_dev · 646 subscribers
Post #95 898
На сколько эффективен формат статов вебпака?
Ужасно неэффектифен, потому что данные в статах денормализованы (почти).

Из-за этого, отчет со сравнением и валидацией сборок фиче-ветки и мастер-метки может занимать 4-5 гб (в нашем случае было именно так).
Это делает проблематичным просмотр отчета, потому что HTML очень большой. Супер-классный парсер от Романа Дворнова его спокойно прожует, а вот браузер уже с трудом и в зависимости от ресурсов вашего устройства, вкладка либо будет очень долго открываться, либо будет бесконечно крашиться, ну и места такой отчет на CI займет не мало, на каждый ПР. В результате чего к вам могут прийти ваши DevOps с вопросов вроде "Вы что, используете наш CI как хранилище фильмов? 😑"

Сегодня ночью я решил эту проблему и UI-отчет теперь очень сильно уменьшился в размере.
Например, отчет на 4-5 гб уменьшился до 250мб (в 15 раз!) и открывается за 15 секунд (от момента когда браузер запустился, до момента когда уже можно смотреть отчет).

Это стало возможным благодаря нормализации статов вебпака до того как записать их в отчет.
Грубо говоря, я составил карту всех возможных модулей в статах, вынес их в отдельное служебное поле статов и заменил места их использования порядковыми номерами. В просмотрщике отчетов я сделал обратное преобразование и.... собственно всё 🙂

Кстати, статы вебпака неспроста денормализованы.
Дело в том, что каждый чанк содержит информацию о модулях внутри него и если одни и те же модули используются в разных чанках, то они будут продублированы в статах для каждого чанка, с небольшими отличиями, например, поле chunks в модуле, который находится в чанке foo, будет равно ["foo"]. И так для каждого чанка, внутри которого содежрится этот модуль. А если у вас сотни чанков и тысячи модулей? 😉
В итоге я решил просто помержить содержимое полей chunks от одних и тех же модлей в разных чанках, таким образом получив один модуль, который содержит инфо о чанках, в которых он используется и это ничего не ломает.

ПР можно посмотреть тут, а changelog релиза 5.8.0 здесь
GitHub Reduce report size by smelukov · Pull Request #104 · statoscope/statoscope closes #101
More from @smelukov_dev
  1. Jun 14, 2026Подумал тут про покрытие тестами кода, который написала модель Есть отдельный интересный к…
  2. May 15, 2026Кстати, если вы когда-нибудь озадачивались подсчетом ресурсов для развертывания LLM локаль…
  3. May 15, 2026В чем произошла заруба: Среди прочего, я хочу понимать какие MCP были запущены и сколько о…
  4. May 15, 2026Подумал: почему бы не писать о том, что делаю прямо сейчас и с чем сталкиваюсь 🙂 Я придер…
  5. Apr 13, 2026ИИ победил! Готовлю кое-что интересное. Интересно, что Ведьмак и Статоскоп поделили степен…
  6. Apr 10, 2026Post #126
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →