Сжатие HTML кода
Здравствуйте. Есть такой плагин для сжатия HTML кода:
/** HTML2Minify plugin for MODX Revo
* @internal @event OnWebPagePrerender
* @internal @properties &Minify=ID TV;integer;1
* @internal @modx_category HTML-code
*
* INSTALL
* 1) Assign Minify TV to your template
* 2) Minify TV values
* - Yes==1||No==0
* - Default value: 1
* 3) Enjoy:)
*/
if($modx->event->name=='OnWebPagePrerender'){
$id = $modx->resource->get('id');
$page = $modx->getObject('modResource', $id);
$tv = $page->getTVValue('Minify');
if($tv == 1){
$html = &$modx->resource->_output;
$html = preg_replace('|\s+|', ' ', $html);
}
}
Если я правильно понял, то для его активации нужно в шаблоне установить TV параметр. Не могу разобраться, подскажите как это сделать. Комментарии: 13
Судя по всему, необходимо для каждой страницы добавить TV, под именем «Minify». Если в нем будет содержаться 1 — то плагин сработает, если 0 — то нет.
Сам плагин повесить на событие OnWebPagePrerender
Сам плагин повесить на событие OnWebPagePrerender
А TV куда добавлять? В шаблоне на вкладку параметры или в другое место?
Просто создайте TV, присвойте его всем шаблонам и установите значение по умолчанию (1)
Нашёл в разделе «Элементы» пиктограмму «Новый TV», если её нажать и задать имя и свойства, то появляется в «Дополнительных полях» новый элемент Minify. Я всё правильно сделал?
Ну да
Смысл от подобной минификации html кода? Тестил pagespeed, делал замеры скорости загрузки — ни на что «вырезанные пробелы» не влияют.
этим занимаются, как правило, чтобы угодить тесту: developers.google.com/speed/pagespeed/insights/
Как написали выше — угодить пэйджспиду, тем самым уменьшить стоимость рекламы в google/yandex
а почему стоимость рекламы снижается?
Насчет яндекса это неизвестно, скорее всего нет, но вот у Гугла при контекстной рекламы решающее значение имеет «показатель качества», состоящий из трех элементов: релевантность объявления, CTR и показатель качества целевой страницы. Так вот, на последний показатель как раз и влияет скорость загрузки
Плагин выдает ошибку, если включить в настройках «сайт недоступен».
Решается простой проверкой
if($modx->event->name=='OnWebPagePrerender'){
$id = $modx->resource->get('id');
if($page = $modx->getObject('modResource', $id)){
$tv = $page->getTVValue('Minify');
if($tv == 1){
$html = &$modx->resource->_output;
$html = preg_replace('|\s+|', ' ', $html);
}
}
а вообще, получение id ресурса, потом получение ресурса по id, а затем получение тв и проверку этого тв можно заменить одной строчкой и получится вот так (проверил у себя, работает):
if($modx->resource->getTVValue('Minify') == 1){
$html = &$modx->resource->_output;
$html = preg_replace('|\s+|', ' ', $html);
}
Решается простой проверкой
if($modx->event->name=='OnWebPagePrerender'){
$id = $modx->resource->get('id');
if($page = $modx->getObject('modResource', $id)){
$tv = $page->getTVValue('Minify');
if($tv == 1){
$html = &$modx->resource->_output;
$html = preg_replace('|\s+|', ' ', $html);
}
}
а вообще, получение id ресурса, потом получение ресурса по id, а затем получение тв и проверку этого тв можно заменить одной строчкой и получится вот так (проверил у себя, работает):
if($modx->resource->getTVValue('Minify') == 1){
$html = &$modx->resource->_output;
$html = preg_replace('|\s+|', ' ', $html);
}
Если у кого-то после сжатия вылезают «битые» крокозябры вместо, например, кириллической буквы «Р» и другие неизвестные символы, пробуйте такой preg_replace:
$html = preg_replace( '/[\p{Z}\s]+/u', ' ', $html);
Решил апнуть темку, вдруг кому поможет. Сам вчера столкнулся.
Регулярное выражение лучше использовать вот это, оно более полное:
Данное регулярное выражение может некорректно «минифицировать» js, если он встроен прямо в html(присутствует например, в вашем шаблоне). В этому случае ужимайте его вручную через js minify. (например через javascript-minifier.com/).
preg_replace('#(?ix)(?>[^\S ]\s*|\s{2,})(?=(?:(?:[^<]++|<(?!/?(?:textarea|pre)\b))*+)(?:<(?>textarea|pre)\b|\z))#', ' ', $output);
Взято отсюда, тут и расшифровка — stackoverflow.com/questions/5312349/minifying-final-html-output-using-regular-expressions-with-codeigniterДанное регулярное выражение может некорректно «минифицировать» js, если он встроен прямо в html(присутствует например, в вашем шаблоне). В этому случае ужимайте его вручную через js minify. (например через javascript-minifier.com/).
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.