2014-12-13 87 views
2


我试图通过压缩Magento的这个生成的HTML代码:
Observer.php压缩Magento的HTML代码

 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)[email protected]', // Shorten multiple whitespace sequences 
        '@(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n][email protected]', //Remove blank lines 
        '@^(\s)+|(|\t|\0|\r\n)[email protected]' //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][email protected]', // Shorten multiple whitespace sequences 
        '@(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n][email protected]', //Remove blank lines 
        '@^(\s)+|(|\t|\0|\r\n)[email protected]' //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页面(采取资源和时间vs真正的好处)真的有意义吗?

回答

1

我不会评论或审查您的代码。破译regexes(任何味道)不是我最喜欢的爱好。

是的,压缩 HTML 如果你的目标是提供专业服务是有意义的

如果我查看某人的网站的HTML代码,里面有很多无意义的空白空间和用户无用的评论,并且网站不尊重Google's PageSpeed Insights Rules,并且无助于使网络更快和更环保,那么它对我说:要知道,不放心,肯定不会给他们你的信用卡号码

我的建议是:

  1. 读这个问题的答案:Stack Overflow: HTML minification?
  2. 阅读其他开发人员的代码,这是一个我用:https://github.com/kangax/html-minifier
  3. benchmark,例如,运行Google Chrome > Developer tools > Audits
  4. test很多,如果你minifier不会无意中破坏
0

实在是做这个,如果你有gzip压缩(你应该有它)没有启用点的页面。这真是浪费CPU周期。您应该专注于图像优化,减少http请求数量并设置正确的缓存标头。