Минификация html и инлайн скриптов

Минификация html и инлайн скриптов

Если посмотреть HTML, генерируемый престой, то можно увидеть кучу не ненужной конечному пользователю информации: отступы, пробелы, переходы строк, комментарии. Все это увеличивает вес страницы, а следовательно и время ее загрузки. В PrestaShop 1.4 для решения это проблемы добавлены опции «Минификация HTML» и «Сжатие внедренного в HTML JavaScript» на вкладке «Настройка→Производительность». После включения этой опции при каждом показе страницы ее код будет прогоняться через функции минификации. Такой подход снижает время загрузки страницы, но увеличивает время ее генерации (почти в 2 раза).

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

Для версии 1.4

В файле config/smarty.config.inc.php ищем строки:

if (Configuration::get('PS_HTML_THEME_COMPRESSION'))
 $smarty->registerFilter('output', 'smartyMinifyHTML');
if (Configuration::get('PS_JS_HTML_THEME_COMPRESSION'))
 $smarty->registerFilter('output', 'smartyPackJSinHTML');

и заменяем на

if (Configuration::get('PS_HTML_THEME_COMPRESSION'))
 $smarty->registerFilter('pre', 'smartyMinifyHTML');
if (Configuration::get('PS_JS_HTML_THEME_COMPRESSION'))
 $smarty->registerFilter('pre', 'smartyPackJSinHTML');

Теперь опция сжатия HTML уже работает. Для минификации инлайн скриптов используется класс JSMin, которому не очень то нравятся теги смарти, поэтому открываем tools/js_minify/jsmin.php и зменяем:

if (ord($this->a) <= self::ORD_LF) {
 throw new JSMinException('Unterminated string literal.');
}

на

if (ord($this->a) <= self::ORD_LF) {
 break;
}

После строк

case ' ':
 if ($this->isAlphaNum($this->a)) {
  $this->action(1);
  break;
}

находим и удаляем

$this->action(3);
 break;

Для версии 1.3

Подключаем плагин prefilter.tws.php. Распаковываем архив в tools/smarty/plugins и добавляем загрузку префильтра в конец файла config/smarty.config.inc.php:

$smarty->load_filter('pre','tws');

~~DISCUSSION~~

minifikacija-html-i-inlajn-skriptov.txt · Последние изменения: 2015/12/27 16:22 (внешнее изменение)