Перейти к содержанию
Официальный форум поддержки Simpla

HTML сжатие страницы Simpla CMS (Smarty)


Перейти к решению Решено osben,

Рекомендуемые сообщения

Гоняетесь за галочками от Google по оптимизации?

https://developers.google.com/speed/pagespeed/insights/?hl=ru

 

Тогда это решение для вас. Встроенное пожатие страниц вашего магазина.

 

  1. создайте бекап файла Smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php на всякий пожарный. Я не уверен, но кажется что Smarty давно не обновляется, но если что бекап пригодится.
  2. скачайте smarty_internal_templatecompilerbase.php и залейте файл вместо него.
  3. почистите папку compiled/имя вашего проекта/
  4. пользуйтесь.
Ссылка на сообщение
Поделиться на другие сайты
  • Решение

с какой то версии симплы есть в config/config.php строка smarty_html_minify = false;
надо заменить на true 

Если Ваше решение отличается и оно на Ваше мнение лучше, то думаю стоит добавить патч на GitHub

Ссылка на сообщение
Поделиться на другие сайты

с какой то версии симплы есть в config/config.php строка smarty_html_minify = false;

надо заменить на true 

 

Если Ваше решение отличается и оно на Ваше мнение лучше, то думаю стоит добавить патч на GitHub

блин подстава... действительно есть. Но в старой не было... хм, что делать прям не знаю. А что там за строчка кеш? Расскажите?

Ссылка на сообщение
Поделиться на другие сайты

с какой то версии симплы есть в config/config.php строка smarty_html_minify = false;

надо заменить на true 

 

Если Ваше решение отличается и оно на Ваше мнение лучше, то думаю стоит добавить патч на GitHub

моё решение меркнет перед полноценным минификатором. У вас даже контент в теxtarea предусмотрен.

Ссылка на сообщение
Поделиться на другие сайты

с какой то версии симплы есть в config/config.php строка smarty_html_minify = false;

надо заменить на true 

 

Если Ваше решение отличается и оно на Ваше мнение лучше, то думаю стоит добавить патч на GitHub

Что если нет такой строчки в config.php?

Ссылка на сообщение
Поделиться на другие сайты

Что если нет такой строчки в config.php?

То надо обновится что было. 

Что именно обновлять, простите нету времени анализировать и расписывать в бесплатном порядке 

Ссылка на сообщение
Поделиться на другие сайты

моё решение меркнет перед полноценным минификатором. У вас даже контент в теxtarea предусмотрен.

Стандартное решение хорошо, но есть нюансы при компиляции, остаются лишние пробелы

 

"<!DOCTYPE html> <html> <head> <title>Хиты продаж</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <m"

Ссылка на сообщение
Поделиться на другие сайты

Стандартное решение хорошо, но есть нюансы при компиляции, остаются лишние пробелы

 

"<!DOCTYPE html> <html> <head> <title>Хиты продаж</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <m"

хм... ну хорошо, вы дали мне надежду что моё не стандартное решение не хуже. Допилю и выложу чуть позже.

Ссылка на сообщение
Поделиться на другие сайты

ну или юзать моё решение если нет желания обновляться.

То что я Вам показал, после обновления ;)

 

Простой способ решить данную проблему, после:

 

// call compiler

$_compiled_code = $this->doCompile($_content);

 

добавить:

 

$_compiled_code = preg_replace('#[\n\r\t]#us', '', $_compiled_code);

 

 

p.s. визуально проблема решена, но я не программист, может что-то и не правильно написал и в дальнейшем могут возникнуть проблемы..

Ссылка на сообщение
Поделиться на другие сайты

То что я Вам показал, после обновления ;)

 

Простой способ решить данную проблему, после:

 

// call compiler

$_compiled_code = $this->doCompile($_content);

 

добавить:

 

$_compiled_code = preg_replace('#[\n\r\t]#us', '', $_compiled_code);

 

 

p.s. визуально проблема решена, но я не программист, может что-то и не правильно написал и в дальнейшем могут возникнуть проблемы..

 

Еще как могут!

Например, если в шаблоне будет фрагмент JS из двух строк вида

a=1

b=2

то Ваш метод склеит две строки в одну, и гарантирована ошибка...

Ссылка на сообщение
Поделиться на другие сайты

Еще как могут!

Например, если в шаблоне будет фрагмент JS из двух строк вида

a=1

b=2

то Ваш метод склеит две строки в одну, и гарантирована ошибка...

А разве переменные или как там это называется, не разделяются запитой ? Если вы правы, то там нужна более детальное функция))

Ссылка на сообщение
Поделиться на другие сайты

Kors прав. Но это страшно не только для жс  но и html и css.

Поскольку данное регулярное выражении вырежет все пробелы.

Если хотите избавится от тех нескольких пробелов - то копайте сюда Smarty\libs\plugins\outputfilter.trimwhitespace.php

Ссылка на сообщение
Поделиться на другие сайты

А разве переменные или как там это называется, не разделяются запитой ? Если вы правы, то там нужна более детальное функция))

просто игнорются вложения в script textarea style pre

остальное пожимается. Причем табуляцию убирать тоже нельзя, она может использоваться как пробел.

У нормальных людей нет скриптов в коде страниц. Только линки.

Ссылка на сообщение
Поделиться на другие сайты

У нормальных людей нет скриптов в коде страниц. Только линки.

У подавляющего большинства сайтов есть JS-скрипты внутри body. Например, так оформляются разные счетчики и подобные вставки. По-Вашему, и http://rozetka.com.ua/ и http://www.mvideo.ru/ и десятки подобных сделаны ненормальными. Как-то Вы категорично оцениваете...

 

Другой вопрос, что JS-скрипт надо писать, не полагаясь на переводы строк как разделители, а разделять операторы явно через ';'...

Ссылка на сообщение
Поделиться на другие сайты

SerSport

Я ж уже вроде подсказывал куда копать...

Smarty\libs\plugins\outputfilter.trimwhitespace.php

Находите строку 63:

'#(:SMARTY@!@|>)\s+(?=@!@SMARTY:|<)#s' => '\1 \2',
И заменяете ее на:
'#(:SMARTY@!@|>)\s+(?=@!@SMARTY:|<)#s' => '\1\2',
Кстати. Я бы на Вашем месте меньше волновался б за эти несчастные пару пробелов. Поскольку при установке smarty_html_minify = true; Функция для уменьшения html кода страницы вызывается каждый раз после генерации html. Я уже говорил Мизантропу что бы он, если хочет сделать нормально, делал pre фильтр. Для того что бы сжать еще взятый tpl. Но он пошел каким то не понятным путем правок smarty и тд.
Ссылка на сообщение
Поделиться на другие сайты
Для того что бы сжать еще взятый tpl. Но он пошел каким то не понятным путем правок smarty и тд. 

Здесь в теме опубликован как раз метод пожатия компайла шаблонов. Этого же достаточно. Или кто-то из нас кого-то не понял.

Ссылка на сообщение
Поделиться на другие сайты

У подавляющего большинства сайтов есть JS-скрипты внутри body. Например, так оформляются разные счетчики и подобные вставки. По-Вашему, и http://rozetka.com.ua/ и http://www.mvideo.ru/ и десятки подобных сделаны ненормальными. Как-то Вы категорично оцениваете...

а что мешает сделать счетчики в js-файлах? Я лишь говорю об идеальном положении вещей. HTML страница для html-кода. JS-файлы для js-кода и т.д. Разделяй и властвуй.

Ссылка на сообщение
Поделиться на другие сайты

 





Для того что бы сжать еще взятый tpl. Но он пошел каким то не понятным путем правок smarty и тд. 
Здесь в теме опубликован как раз метод пожатия компайла шаблонов. Этого же достаточно. Или кто-то из нас кого-то не понял.

 

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

Вы писали в теме http://forum.simplacms.ru/topic/8320-где-в-движке-simpla-csm-компилятся-шаблоны/

 

Те, что потом записываются в /var/www/site/compiled/template/*.tpl.php

Хочу сделать пожатие html кода. Пока удалось пожимать на лету, но не выход ибо нагрузка на процессор сервера.

По сути Ваше текущее решение и есть пожатие на лету... И smarty_html_minify = true - тоже есть пожатие на лету.

Ссылка на сообщение
Поделиться на другие сайты

Вот на мой взгляд лучшее решения для этой задачи. Может кто что предложит лучше.

Simpla с smarty > 3

В smarty - ничего не меняем

Просто заменяем api/Design.php

и в config/config.php ставим smarty_html_minify = true;

Design.php

Ссылка на сообщение
Поделиться на другие сайты

 

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

Вы писали в теме http://forum.simplacms.ru/topic/8320-где-в-движке-simpla-csm-компилятся-шаблоны/

 

По сути Ваше текущее решение и есть пожатие на лету... И smarty_html_minify = true - тоже есть пожатие на лету.

Нет дорогой мой человек, компайл компилится только один раз при изменении шаблона. А дальше он отдается по запросу. Вы можете открыть файлы и увидеть что они хранятся сжатыми. Так что нет ни какого "на лету". Только если у вас компайл не настроен на постоянную компиляцию при каждом запросе. Но это уже не ко мне ;)

А та тема прошлое моё неудачное решение задачи.

Ссылка на сообщение
Поделиться на другие сайты

Вот на мой взгляд лучшее решения для этой задачи. Может кто что предложит лучше.

Simpla с smarty > 3

В smarty - ничего не меняем

Просто заменяем api/Design.php

и в config/config.php ставим smarty_html_minify = true;

а вы уверены, что этот файл ни у кого не изменялся напильником? Как вариант указать строки с изменениями.

Ссылка на сообщение
Поделиться на другие сайты

Нет дорогой мой человек, компайл компилится только один раз при изменении шаблона. А дальше он отдается по запросу. Вы можете открыть файлы и увидеть что они хранятся сжатыми. Так что нет ни какого "на лету". Только если у вас компайл не настроен на постоянную компиляцию при каждом запросе. Но это уже не ко мне ;)

А та тема прошлое моё неудачное решение задачи.

 

Беру свои слова назад. У Вас не налету.

Но предложенный Вами способ - будет терять переменные и делать ошибки - и это факт.

Для примера можете попробовать передать ассоциативный массив в смарти. К примеру такой:

$simpla->view->assign('ttestt', array('key  two spaces'=>'work'));
И в шаблоне попробовать вывести:
{$ttestt['key  two spaces']}
В результате переменной - не будет, а если включен показ ошибок E_ALL то еще и ошибку. И это пример только с пробелами. А могут быть еще и \n\r\t и что угодно...

А вообще - что это за проверка такая? 

 if(!false && !preg_match('#/(simpla|order)/#i',$this->template->getTemplateFilepath())){
Может хотя бы так:
if(!preg_match('#/(simpla|order)/#i', $this->smarty->_current_file)){
 

а вы уверены, что этот файл ни у кого не изменялся напильником? Как вариант указать строки с изменениями.

 

Ну если у кого то изменялся то там всего перенести 1 ф-ю и 1 строку заменить, а не заменять весь класс смарти.

Ссылка на сообщение
Поделиться на другие сайты

По моему вы придираетесь. Вероятность, что будет ассоциативный массив, с ключом в котором есть двойной пробел стремится к нулю. И даже если он есть, то вероятность, что будут обращаться по его имени ещё меньше все ограничится ещё на этапе перебора. Перенос в ключе и вовсе может вызвать синтаксическую ошибку вы не находите? Вообще не могу представить себе ситуацию когда кто-то будет использовать такие ключи. Это нужно быть большим извращенцем оригиналом. А если и так, то он сам себе злобный Буратино.

 

Второе является скорее перестраховкой. Осталось от старой версии кода поскольку тестировался на живом магазине. Можно убрать. Так же не вижу проблем с указанием имени вместо пути. Даже если и попадет в условие фильтра какая нибудь ещё страница на работу сайта это не скажется.

 

И потом вы не внимательно читаете тему я тут уже написал, что решение с указанием в конфигурации параметра более лучше. Так об чем разговор? Показать кто лучше или круче?

Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...