Extrapacker

Extrapacker это очень важная и мощная часть движка Micron. Он объединяет все css и js файлы запрашиваемой страницы в один файл и пакует их, что значительно увеличивает скорость загрузки страниц на сложных проектах.

На выходе его работы мы получаем всего один css файл и один js файл в папке tmp.
При этом вам совершенно не нужно прописывать какие либо инструкции и модифицировать код шаблона. Всё это он делает автоматически и без нашего участия.
Далее идет более подробное описание его настроек и работы.

Описание работы

Экстрапакер не делает перепаковку при каждом запросе. Он следует алгоритму:

  • Составить список css и js файлов;
  • Проверить не изменились ли они с момента последней запаковки;
  • Проверить не появились ли новые файлы с момента последней запаковки;
  • В случае необходимости запаковать файлы по новой (добавляя к имени запакованного файла текущую дату запаковки);
  • Заменить все ссылки на css и js файлы на ссылку на запакованые файлы.

Запаковка css/js файлов происходит в следующие этапы:

  • Объединение всех файлов в один;
  • Для css файлов - проход LessCss компилятора;
  • Удаление всех лишних пробелов, комментариев, символов конца строки и пр.;
  • Сохранение в файл.
  • При необходимости, запаковка в GZIP формат и сохранение в файл.
Для запаковки js файлов используется jsmin

Конфигурация

Настройки экстрапакера находятся в файле 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 файлы объединены в один.