Фантомные килобайты: нейросетевая реконструкция невидимых JS-бандлов по следам в DevTools Performance Monitor

Время чтения: 7 минут
Есть вопросы? Мы в соц сетях

Каждый веб-разработчик сталкивался с ситуацией, когда после оптимизации бандлов сайт всё равно грузится медленно. Вы открываете DevTools Performance Monitor, видите всплески активности JavaScript, но в списке ресурсов не находите ничего подозрительного. Эти «фантомные килобайты» — невидимые части кода, которые браузер исполняет, но которые не попадают в стандартные отчёты. В этой статье мы рассмотрим, как современные нейросети позволяют реконструировать эти скрытые JS-бандлы по косвенным следам в Performance Monitor, что даёт возможность найти и устранить узкие места производительности.

Проблема фантомных килобайт

Современные сайты собираются из сотен модулей, и сборщики типа Webpack или Rollup часто создают множество мелких бандлов, динамически подгружаемых по мере необходимости. Однако не весь код выполняется явно: некоторые части могут быть инлайнированы, другие — генерироваться в рантайме, третьи — подгружаться через динамические импорты, которые не всегда видны в сетевой вкладке. Performance Monitor показывает только метрики: FPS, CPU, память, но не даёт информации о том, какие функции выполняются. В результате разработчик видит, что CPU загружен на 90%, но не может понять, какой именно код вызывает нагрузку.

Эти скрытые килобайты могут возникать из-за:

  • Динамических import() с переменными, которые не статически анализируются
  • Инлайн-скриптов, вставляемых CMS или плагинами
  • Кода, генерируемого библиотеками (например, полифиллы, создаваемые на лету)
  • Обфусцированного кода, который трудно сопоставить с исходным

В результате размер фактически исполняемого кода может быть на 20-30% больше, чем суммарный размер всех загруженных файлов. Это приводит к увеличению времени загрузки, снижению FPS и повышенному энергопотреблению на мобильных устройствах.

Как нейросети реконструируют код

Нейросети, обученные на огромных корпусах JavaScript-кода, способны предсказывать недостающие фрагменты по контексту. В контексте реконструкции фантомных бандлов используется подход, основанный на анализе трассировки стека вызовов и временных меток из Performance Monitor. Собираются данные о том, какие функции вызываются, с какой частотой и в каком порядке. Затем нейросеть сопоставляет эти паттерны с известными структурами кода и генерирует вероятный исходный код.

Процесс можно разбить на этапы:

  • Сбор данных: записываем Performance Monitor в течение нескольких минут на целевой странице.
  • Обработка: выделяем все функции, которые исполнялись, но отсутствуют в загруженных файлах.
  • Реконструкция: передаём список функций и их временные характеристики в нейросеть, которая генерирует код.
  • Валидация: сравниваем полученный код с реальным поведением страницы (например, повторяем профилирование с восстановленным кодом).

Ключевая сложность — восстановить не просто синтаксис, а логику. Поэтому модели часто обучаются на парах «трассировка-код», созданных специально для этой задачи.

Практический пример: анализ следа

Представьте, что у вас есть интернет-магазин, и вы замечаете, что при добавлении товара в корзину происходит заметная задержка. Performance Monitor показывает пик CPU, но в сетевой вкладке нет новых запросов. Вы записываете профиль и обнаруживаете, что вызывается функция updateCart, которая не определена ни в одном из ваших файлов. Используя нейросеть, вы можете восстановить её код.

Допустим, у вас есть следующий след:

function updateCart() { // неизвестный код
    // вызовы: getItemPrice, calculateDiscount, applyPromo
}

Нейросеть, обученная на типовых паттернах, может сгенерировать:

function updateCart() {
    const items = cart.getItems();
    const total = items.reduce((sum, item) => sum + getItemPrice(item), 0);
    const discount = calculateDiscount(total);
    return applyPromo(total - discount);
}

Этот код не является точной копией, но он показывает, какие функции и данные участвуют. Затем вы можете найти, откуда этот код был взят — возможно, это устаревшая версия модуля, которая осталась от предыдущей версии сайта.

Инструменты и технологии

Для реализации этой методики вам понадобятся:

  • DevTools Performance Monitor — для сбора первичных данных.
  • Puppeteer или Playwright — для автоматизации профилирования.
  • Нейросетевые библиотеки — например, TensorFlow.js или ONNX Runtime для запуска моделей в браузере.
  • Предобученные модели — CodeBERT, CodeGPT или специализированные решения, такие как Code2Vec.

Пример автоматизации сбора данных с помощью Puppeteer:

const puppeteer = require('puppeteer');
(async () => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.goto('https://example.com');
    await page.tracing.start({path: 'trace.json', categories: ['devtools.timeline']});
    // имитация действий пользователя
    await page.click('button.add-to-cart');
    await page.waitForTimeout(2000);
    await page.tracing.stop();
    await browser.close();
})();

После сбора данных вы можете извлечь из трассы все вызовы функций и передать их в нейросеть.

Чеклист для внедрения

Если вы хотите внедрить этот подход в свой рабочий процесс, следуйте чеклисту:

ШагДействие
1Запишите профиль Performance Monitor для ключевых сценариев (загрузка, взаимодействие).
2Сравните список исполняемых функций со списком функций из загруженных бандлов.
3Выделите функции, которые отсутствуют, и передайте их в нейросетевую модель.
4Проанализируйте сгенерированный код и найдите его источник (например, через поиск по кодовой базе).
5Устраните причину: либо удалите дублирующий код, либо оптимизируйте динамические импорты.
6Проведите повторное профилирование и убедитесь, что фантомные килобайты исчезли.

Вывод

Фантомные килобайты — это реальная проблема, которая может оставаться незамеченной годами. Нейросетевая реконструкция JS-бандлов по следам Performance Monitor — это новый подход, который позволяет заглянуть внутрь исполняемого кода и найти скрытые зависимости. Хотя технология ещё молода, она уже демонстрирует впечатляющие результаты в области оптимизации производительности. Используйте описанные методы, чтобы ваш сайт работал быстрее и эффективнее.

Мы разрабатывали
apeironspace
jivosite
мтс
originalvirginia
эльдорадо
eparcel
decken-wood
wildberies