Минификация 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~~