Сжать Magento HTML-код

Я пытаюсь сжать HTML-код, сгенерированный Magento, следующим образом:
Observer.php

        public function alterOutput($observer)
{
$lib_path = Mage::getBaseDir('lib').'/Razorphyn/html_compressor.php';

include_once($lib_path);

//Retrieve html body
$response = $observer->getResponse();
$html     = $response->getBody();

$html=html_compress($html);

//Send Response
$response->setBody($html);
}

html_compressor.php:

function html_compress($string){

global $idarray;
$idarray=array();

//Replace PRE and TEXTAREA tags
$search=array(
'@(<)\s*?(pre\b[^>]*?)(>)([\s\S]*?)(<)\s*(/\s*?pre\s*?)(>)@',   //Find PRE Tag
'@(<)\s*?(textarea\b[^>]*?)(>)([\s\S]*?)(<)\s*?(/\s*?textarea\s*?)(>)@' //Find TEXTAREA
);
$string=preg_replace_callback($search,
function($m){
$id='<!['.uniqid().']!>';
global $idarray;
$idarray[]=array($id,$m[0]);
return $id;
},
$string
);

//Remove blank useless space
$search = array(
'@( |\t|\f)+@', // Shorten multiple whitespace sequences
'@(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+@',   //Remove blank lines
'@^(\s)+|( |\t|\0|\r\n)+$@' //Trim Lines
);
$replace = array(' ',"\\1",'');
$string = preg_replace($search, $replace, $string);

//Replace IE COMMENTS, SCRIPT, STYLE and CDATA tags
$search=array(
'@<!--\[if\s(?:[^<]+|<(?!!\[endif\]-->))*<!\[endif\]-->@',  //Find IE Comments
'@(<)\s*?(script\b[^>]*?)(>)([\s\S]*?)(<)\s*?(/\s*?script\s*?)(>)@',    //Find SCRIPT Tag
'@(<)\s*?(style\b[^>]*?)(>)([\s\S]*?)(<)\s*?(/\s*?style\s*?)(>)@',  //Find STYLE Tag
'@(//<!\[CDATA\[([\s\S]*?)//]]>)@', //Find commented CDATA
'@(<!\[CDATA\[([\s\S]*?)]]>)@'  //Find CDATA
);
$string=preg_replace_callback($search,
function($m){
$id='<!['.uniqid().']!>';
global $idarray;
$idarray[]=array($id,$m[0]);
return $id;
},
$string
);

//Remove blank useless space
$search = array(
'@(class|id|value|alt|href|src|style|title)=(\'\s*?\'|"\s*?")@',    //Remove empty attribute
'@<!--([\s\S]*?)-->@',  // Strip comments except IE
'@[\r\n|\n|\r]@', // Strip break line
'@[ |\t|\f]+@', // Shorten multiple whitespace sequences
'@(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+@', //Remove blank lines
'@^(\s)+|( |\t|\0|\r\n)+$@' //Trim Lines
);
$replace = array(' ','',' ',' ',"\\1",'');
$string = preg_replace($search, $replace, $string);

//Replace unique id with original tag
$c=count($idarray);
for($i=0;$i<$c;$i++){
$string = str_replace($idarray[$i][0], "\n".$idarray[$i][1]."\n", $string);
}

return $string;
}

Мои главные мысли два:

  • Это тяжелое (или хорошее) решение?
  • Есть ли способ оптимизировать это?
  • Имеет ли смысл сжимать страницу Magento HTML (затраченный ресурс и время против реальной выгоды)?

2

Решение

Я не буду комментировать или пересматривать ваш код. Дешифровка regexes (на любой вкус) не мое любимое хобби.

Да, сжатие HTML имеет смысл если вы стремитесь предоставлять профессиональные услуги.

Если я смотрю на HTML-код чьего-то сайта с множеством бессмысленных пробелов и бесполезных комментариев внутри, и сайт неуважение Правила Google PageSpeed ​​Insights и не помогает сделать Интернет быстрее и экологичнее, чем он говорит мне: знай, не доверяй, конечно же, не давай им номер своей кредитной карты

Мой совет:

  1. прочитайте ответы на этот вопрос: Переполнение стека: минимизация HTML?
  2. прочитайте код другого разработчика, это тот, который я использую: https://github.com/kangax/html-minifier
  3. benchmarkнапример, бежать Google Chrome > Developer tools > Audits
  4. test много, если ваш минификатор не случайно уничтожает страницы
1

Другие решения

Это действительно бессмысленно, если у вас включено сжатие gzip (и оно должно быть включено). На самом деле это пустая трата циклов процессора. Лучше сосредоточиться на оптимизации изображений, сокращении количества http-запросов и настройке правильных заголовков кэша.

0