Extrapacker
Extrapacker это очень важная и мощная часть движка Micron. Он объединяет все css и js файлы запрашиваемой страницы в один файл и пакует их, что значительно увеличивает скорость загрузки страниц на сложных проектах.
На выходе его работы мы получаем всего один css файл и один js файл в папке tmp.
При этом вам совершенно не нужно прописывать какие либо инструкции и модифицировать код шаблона. Всё это он делает автоматически и без нашего участия.
Далее идет более подробное описание его настроек и работы.
Описание работы
Экстрапакер не делает перепаковку при каждом запросе. Он следует алгоритму:
- Составить список css и js файлов;
- Проверить не изменились ли они с момента последней запаковки;
- Проверить не появились ли новые файлы с момента последней запаковки;
- В случае необходимости запаковать файлы по новой (добавляя к имени запакованного файла текущую дату запаковки);
- Заменить все ссылки на css и js файлы на ссылку на запакованые файлы.
Запаковка css/js файлов происходит в следующие этапы:
- Объединение всех файлов в один;
- Для css файлов - проход LessCss компилятора;
- Удаление всех лишних пробелов, комментариев, символов конца строки и пр.;
- Сохранение в файл.
- При необходимости, запаковка в GZIP формат и сохранение в файл.
Конфигурация
Настройки экстрапакера находятся в файле core/config/main.php:
$g_config['extrapacker']['dir'] = 'extrapacker'; $g_config['extrapacker']['packHtml'] = false; $g_config['extrapacker']['packCss'] = true; $g_config['extrapacker']['packJs'] = true; $g_config['extrapacker']['removeDubCss'] = true; $g_config['extrapacker']['removeDubJs'] = true; $g_config['extrapacker']['arrExeptions_js'] = array(); $g_config['extrapacker']['arrExeptionsNotAdd_js'] = array(); $g_config['extrapacker']['arrExeptions_css'] = array(); $g_config['extrapacker']['arrExeptionsNotAdd_css'] = array(); $g_config['extrapacker']['buffering'] = true; $g_config['extrapacker']['useLessPhp'] = true;
О каждом параметре:
- dir - имя подпапки в папке tmp, в которую следует сохранять запакованные файлы;
- packHtml - выполнять ли запаковку html кода. Используется редко, потому что после этого код страницы становится нечитаемым;
- packCss - выполнять запаковку css файлов;
- packJs - выполнять запаковку js файлов;
- removeDubCss - убрать повторяющиеся css/less файлы. Работает только когда packCss = false;
- removeDubJs - убрать повторяющиеся js файлы. Работает только когда packJs = false;
- arrExeptions_js - массив js файлов, которые нужно оставить в паке, но нельзя минифицировать (будут добавлены в конце пака);
- arrExeptionsNotAdd_js - массив js файлов, которые не нужно добавлять в пак (оставить в шаблоне не тронутыми);
- arrExeptions_css - массив css файлов, которые нужно оставить в паке, но нельзя минифицировать (будут добавлены в начало пака);
- arrExeptionsNotAdd_css - массив css файлов, которые не нужно добавлять в пак (оставить в шаблоне не тронутыми);
- buffering - включить ли дополнительную запаковку в GZIP формат;
- useLessPhp - использовать ли проход LessCss компилятора. Обычно нет необходимости отключать.
Исключение файлов из запаковки
Иногда возникает ситуация, когда файлы не нужно добавлять запаковывщик. Это могут быть внешние js/css или большой js/css файл который используется только на одной странице. В этом случае у нас есть следующие варианты:
- Не помещать ссылку на css/js файл в блок <head></head>.
-
Указать js файл в массиве arrExeptionsNotAdd_js. Пример:
$g_config['extrapacker']['arrExeptionsNotAdd_js'] = array( 'http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js', Root('i/js/example.js') // для локальных файлов относительный путь );
-
Указать css файл в массиве arrExeptionsNotAdd_css. Пример:
$g_config['extrapacker']['arrExeptionsNotAdd_css'] = array( 'http://fonts.googleapis.com/css?family=PT+Sans:400,700,400italic&subset=latin,cyrillic', Root('i/css/example.css') // для локальных файлов относительный путь );
-
Добавить в ссылку аттрибут m-not-add. Пример:
<script type="text/javascript" m-not-add src="/i/js/test.js"></script> <link rel="stylesheet" type="text/css" m-not-add href="/i/css/text.css"/>
Ошибки в запакованных css/js файлах
Изредка случается такая ситуация, когда внешняя js библиотека запаковывается не совсем корректно, что приводит к ошибкам. Если такая ситуация произошла, то мы рекомендуем добавить такие js файлы в arrExeptions_js (а css файлы в arrExeptions_css). Содержимое этих файлов будет добавлено в общий пак (в его конце), но при этом не будет минифицированно. Естественно что LessCss для таких css файлов не отработает.
О LessCss
В мануале уже упоминалось о том что для css файлов можно использовать LessCss синтаксисис.
При этом не бойтесь использовать переменные и классы, объявленные в разных файлах.
Главное чтобы ваши css файлы были указаны в правильной последовательности. LessCss компиляция происходит уже после того как все css файлы объединены в один.