Сжатие CSS и JS это не прихоть, а необходимость и удобство. Конечно же в дефолтном OpenCart этой фичи нет, размечтались! Но не ссыте, не всё так плохо. У меня низкая толерантность к фрустрации, так что пришлось запилить эту фичу. С пониманием дела и без костылей:
- Поправил логику подключения jQuery - в дефолте она харкодом в header.twig, без всяких условий. Теперь хардкодом она подключается только если не включено сжатие, а если включено, то она тоже подключается и в бандле всегда первая. Если спросите как она может не быть первой, то ответ "легко", потому что контроллер header частенько в других контроллерах подключается одним из последних, порядок вызова addScript решает (тот что в header.php). Учите матчасть!
- Добавил два переключателя в настройки разработчика "Сжимать CSS" и "Сжимать JS". Включил - работает, выключил - возвращается дефолт.
- Автоматически собирает все скрипты и стили, подключенные через $this->document->addScript / addStyle, в один бандл на страницу. Разные страницы - разные бандлы. Никаких ручных настроек, никаких сюрпризов.
- Для сжатия используется библиотека matthiasmullie/minify, так что без чудотворных кастомных решений.
- В имя бандла добавляется уникальный токен: хэш от всех файлов + случайный токен из настроек. Нужно обновить случайный токен? Просто в настройках разработчика нажми "Сбросить". Нет проблемы "клиент видит старый кэш и ничего не работает".
Это не магия. Это понимание, как устроен и работает OpenCart в части подключения скриптов и стилей. В дефолте ты либо стискиваешь зубы и терпишь, либо ставишь модуль, который конечно же не работает из коробки (даже если обещают что работает). Зачем? Добавить две радиокнопки, перехватить addScript/addStyle и минифицировать - это не космос, это несколько часов работы. Так я и сделал. Не благодарите! Ну или хотя бы не все сразу 😉
Теперь в exopencart сайт летает (98-100 на десктопах в Google Page Speed и 80-85 на мобилах). Включи сжатие в настройках разработчика - и всё. Никаких лишних запросов, никаких "очисти кэш и обнови страницу".
Пробуем, не стесняемся!