Сжатие HTML
Читал одну статью и задумался, а почему на modx нет такой утилиты?
Почему он не выплевывает результат в сжатом виде для юзера?
Кто нибудь задавался таким вопросом или озадачивал себя такой задачей?
М.б. прикрутить указанный код (продублирую его ниже), к плагину и вызывать по определенному событию?
<?php
function sanitize_output($buffer) {
$search = array(
'/\>[^\S ]+/s', // strip whitespaces after tags, except space
'/[^\S ]+\</s', // strip whitespaces before tags, except space
'/(\s)+/s' // shorten multiple whitespace sequences
);
$replace = array(
'>',
'<',
'\\1'
);
$buffer = preg_replace($search, $replace, $buffer);
return $buffer;
}
ob_start("sanitize_output");
...
Комментарии: 25
так напиши в плагин и все…
У меня вот такой давным давно вариант где то валялся…
У меня вот такой давным давно вариант где то валялся…
switch($modx->event->name){
case 'OnWebPagePrerender':
if (!empty($modx->resource)
&& $modx->resource->get('cacheable')
&& $modx->resource->get('published')
&& $modx->resource->get('searchable')
&& $modx->resource->get('richtext')
&& $modx->resource->_output != ''
)
{
$html = &$modx->resource->_output;
$html = preg_replace('|\s+|', ' ', $html);
}
break;
}
Не понятно на какое событие вешать, если необходимо во время вывода, чтоб сам исходник был нормального формата. OnWebPagePrerender?
Если я всё правильно понял.
Если я всё правильно понял.
OnWebPagePrerender
<?php
$buffer = $modx->resource;
function sanitize_output($buffer) {
$search = array(
'/\>[^\S ]+/s', // strip whitespaces after tags, except space
'/[^\S ]+\</s', // strip whitespaces before tags, except space
'/(\s)+/s' // shorten multiple whitespace sequences
);
$replace = array(
'>',
'<',
'\\1'
);
$buffer = preg_replace($search, $replace, $buffer);
return $buffer;
}
if (!empty($buffer)) {
ob_start("sanitize_output");
}
Сделал так, результата нет
чего ты сделал вот так?
где сделал? В плагине? Конечно результата не будет.
привел же выше рабочий плагин…
где сделал? В плагине? Конечно результата не будет.
привел же выше рабочий плагин…
Пример не работает и в месте с ним теперь и сайт.
библиотеки хотяб поставьте. Пример от Володи прекрасно работает.
Та дело не в библиотеке, а в хостинге… он лёг.
Что за библиотеки?
Сайт скорее всего не работает из-за того, что функции из кешированных сниппетов и плагинов ругаются, что они уже есть. Оберни в !function_exists.
А серьезно сколько выхлоп от этого, байт 200?
А серьезно сколько выхлоп от этого, байт 200?
<?php
$bufer = &$modx->resource->_output;
$search = array(
'/\>[^\S ]+/s', // strip whitespaces after tags, except space
'/[^\S ]+\</s', // strip whitespaces before tags, except space
'/(\s)+/s' // shorten multiple whitespace sequences
);
$replace = array(
'>',
'<',
'\\1'
);
$buffer = preg_replace($search, $replace, $buffer);
2 кб сэкономлено! :)
Работает.
Заметил, что «к» превращается в "�", как быть?
Заметил, что «к» превращается в "�", как быть?
Работает — сжимает, но почему то часть скриптов перестало работать (плавающий блок за посетителем и кнопки вверх-вниз)
Чтоб работало корректно, стоит закрывать функции ; иначе будет синтаксическая ошибка.
Можно подробнее, как закрыть?
Посмотрел minifyhtml — плагин, естественно тоже глючат скрипты
Посмотрел minifyhtml — плагин, естественно тоже глючат скрипты
<?php
$output = $modx->resource->_output;
$output= preg_replace('|\s+|', ' ', $output);
$modx->resource->_output = $output;
Точка с запятой в конце функции, зачастую библиотеки минифицируются и точку с запятой удаляют, получается ошибка т.к. следом идет наименование следующей функции или переменной и т.п.
По коду ничем более помочь не смогу.
По коду ничем более помочь не смогу.
Спасибо, буду думать
странно, на двух сайтах работает, а на третьем нет. причем событие вызывается дважды. сделал вывод в лог $html, а он пустой.
Решение уже есть в официальном репозитории — minifyhtml. Сам пока не пробовал в работе, но на заметку взял. Кто попользуется отпишитесь, как результат.
как пропускать теги
<pre>
Имхо, экономия на спичках. Правильно настроенный сервер и сам все сжимает и передаёт в gzip deflate
Почему тогда сжат исходный код гугла и яндекса?
На миллионах посетителей в день каждый байт на счету.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.