В современном WordPress проекты часто используют сложные сборки JavaScript и CSS с условной загрузкой модулей. Например, скрипт для слайдера подключается только на страницах с галереей, а модуль корзины — только в WooCommerce. Однако при обновлении темы, смене сборщика или ручном вмешательстве эта логика может быть потеряна. Восстановить её по документации не всегда возможно, особенно если проект достался «в наследство» без исходников. На помощь приходят остаточные следы: манифесты service-worker и source maps минифицированных бандлов. В этой статье мы рассмотрим, как с помощью нейросетей реконструировать утраченную логику условной загрузки модулей в WordPress.
Service-worker — это скрипт, который работает в фоне и управляет кэшированием. Его манифест (обычно файл sw.js или service-worker.js) содержит список ресурсов для предварительного кэширования и правила их обновления. Анализируя, какие URL попадают в кэш и при каких событиях (install, activate, fetch), можно понять, какие модули считаются критичными и когда они загружаются.
Source maps — это файлы .map, которые связывают минифицированный код с исходным. Они содержат имена исходных файлов, структуру папок и даже исходный код (если включён sourcesContent). По графу зависимостей в source maps можно восстановить, какие модули импортируют друг друга и в каком порядке.
Первый шаг — извлечь все модули и их связи. Для этого парсим source maps и строим ориентированный граф, где вершины — модули, а рёбра — импорты. Например, если main.js импортирует slider.js и cart.js, то в графе будут соответствующие рёбра. Дополнительно можно пометить модули, которые встречаются в манифесте service-worker, как «кэшируемые».
Пример графа в формате JSON:
{
"modules": [
{"id": "main.js", "imports": ["slider.js", "cart.js"]},
{"id": "slider.js", "imports": []},
{"id": "cart.js", "imports": ["utils.js"]},
{"id": "utils.js", "imports": []}
],
"cached": ["main.js", "utils.js"]
}Такой граф даёт основу для дальнейшего анализа.
Используем графовую нейронную сеть (GNN), которая принимает на вход граф зависимостей и предсказывает для каждого модуля условия его загрузки. Обучение проводится на исторических данных, где известны исходные условия (например, из старых версий кода). Модель учится сопоставлять структуру графа и наличие модуля в service-worker с типом условия: «всегда», «только на определённых страницах», «при наличии элемента» и т.д.
После обучения модель может предсказать условия для утраченных модулей. Например, если модуль slider.js не кэшируется, но имеет высокую степень связности с main.js, модель может предположить, что он загружается динамически при появлении слайдера.
Допустим, у нас есть минифицированный бандл app.min.js и source map к нему. В манифесте service-worker перечислены только app.min.js и vendor.min.js. Мы строим граф и видим, что в app.min.js есть динамический импорт chunk-slider.js, который не кэшируется. Нейросеть, обученная на похожих проектах, предсказывает, что этот чанк загружается при наличии элемента .slider на странице. Проверяем гипотезу: ищем в исходном коде (если есть) или в других source maps упоминания слайдера. Если подтверждается, восстанавливаем условие в functions.php или в JS.
Пример восстановленного кода на PHP:
add_action('wp_enqueue_scripts', function() {
if (is_page_template('template-gallery.php')) {
wp_enqueue_script('slider-module', get_template_directory_uri() . '/js/chunk-slider.js', [], null, true);
}
});source-map-explorer или собственного парсера.Нейросетевая реконструкция утраченной логики условной загрузки модулей в WordPress — это мощный подход, который позволяет восстановить работоспособность сайта без полного переписывания кода. Используя остаточные данные из service-worker и source maps, можно построить граф зависимостей и с помощью GNN предсказать условия загрузки. Это экономит время и снижает риски. Однако важно помнить, что модель требует качественных данных для обучения, а результаты нуждаются в проверке.







