НОВОСТИ Magento 2^ Advanced Javascript Bundling

Alvaros
Онлайн
Регистрация
14.05.16
Сообщения
21.452
Реакции
101
Репутация
204
-6ys4becktoonoqh09e0w9xm8sm.jpeg


Большой размер JavaScript файлов в Magento2 — большая проблема, в этой статье мы попробуем Magento Advanced JavaScript Bundling. Рассмотрим инструменты, настройку и работоспособность.

Основная цель JavaScript-бандлинга состоит в том, чтобы уменьшить количество и размер запрашиваемых ресурсов для каждой страницы.

В дефолтной версии бандлинга на каждую страницу подгружается абсолютно весь «набор» сбандленных JavaScript файлов.

kccfomgfmuxg7jeim6ipftz5pvu.jpeg


То есть, в бандлах на примере выше присутствуют JavaScript файлы чекаута, страницы категорий, продуктовой страницы и прочее, и все это грузится для каждой страницы.

Advanced JavaScript Bundling помогает решить эту задачу, а именно, сформировать бандлы по типам страниц. Например, общий бандл для JavaScript файлов, которые нужны на каждой странице, и отдельные бандлы для чекаута, категории, продуктовой страницы, CMS-страниц и пр.

Звучит красиво, но на деле не все так хорошо, как может показаться.

В официальной документации есть , как настроить advanced JavaScript bundling.

В ней предлагается несколько вариантов:

Ручная настройка — основана на
Модуль Magento_Baler

Ручной режим


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

Для реализации требуется наличие следующих инструментов:

  • (опционально)


Пример билд-файла можно посмотреть

После того, как мы проделали всю по составлению билд-файла, необходимо выполнить генерацию статики:

uqa68fpxnz9aj7u23bh8xx5uk0g.png


Далее перенести содержимое статики во временных каталог:

futpykiwtcs_v12zg1zujst2fjm.png


Затем запустить r.js optimizer для файла билд-файла:

qu1f2x3ly-qfcqrwvrmyapuutv0.png


Эта команда генерирует бандлы в подкаталог bundles корневого каталога Magento:

dkonldrmb7b0_x75gzci5qmy_am.png


Чтобы RequireJS использовал эти бандлы, необходимо добавить onModuleBundleComplete callback в файле build.js:

1lwl-fdgufzlbj-tz9u9s7ayft4.png


Далее, запустить команду

xi7nphtgvyvpz4byygpijo7uema.png


Если мы откроем requirejs-config.js в pub/static/frontend/Magento/{theme}/{locale}, то увидим следующее:

xmxxnbujwjzvaxnp9atbwjusl1e.png


Для «сжатия» бандлов мы можем можем добавить следующую конфигурацию в билд-файле:

rxbzoekd0vi1jlpjdjyxfyisnt0.png


Magento_Baler



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

Так же существует ряд сторонних решений:


На данный момент времени нет готового работающего инструмента для реализации этой задачи. Все примеры реализованы на базовой теме Luma, в случае полноценного интернет-магазина на Magento, который, как правило, включает в себя ряд сторонних модулей — нет никаких гарантий оптимальной работы этих модулей при advanced JavaScript bundling.
 
Сверху Снизу