纯代码为WordPress压缩前端html代码 附BUG修复

2016-11-5 11:51 来自本站原创 37,632 9 6
[摘要]

wp-html-compression是WordPress常用的压缩前端代码插件,本文简析纯代码实现WordPress前端代码压缩功能,并指出常见bug的解决方法。

除了主机的因素之外,一个网站的加载速度还跟前端代码压缩程度有关,如果对前端html做压缩优化,可以在一定程度上减小页面大小,提高加载速度。而在WordPress主题中应用最广的应该就是wp-html-compression这个插件或者代码版了。

其原理是删除前端html中空格和制表符等不必须的内容,从而简化代码,你甚至不需要设置什么,只要一段代码就能给WordPress加速。

纯代码为WordPress压缩前端html代码 附BUG修复

绝大多数的优质主题都会集成这个代码,今天单独拿出来说,一方面是想帮助没有集成此功能的主题用;另外一方面是想将一些常见好用的WordPress代码单独列出来,也算是稍作研究,会吃鱼也会钓鱼,以便单独写主题模板时按需定制功能。

压缩WordPress前端html代码版

/*WordPress前端代码压缩*/
function wp_compress_html(){ 
 function wp_compress_html_main ($buffer){ 
 $initial=strlen($buffer); 
 $buffer=explode("<!--wp-compress-html-->", $buffer); 
 $count=count ($buffer); 
 for ($i = 0; $i <= $count; $i++){ 
 if (stristr($buffer[$i], '<!--wp-compress-html no compression-->')) { 
 $buffer[$i]=(str_replace("<!--wp-compress-html no compression-->", " ", $buffer[$i])); 
 } 
 else { 
 $buffer[$i]=(str_replace("\t", " ", $buffer[$i])); 
 $buffer[$i]=(str_replace("\n\n", "\n", $buffer[$i])); 
 $buffer[$i]=(str_replace("\n", "", $buffer[$i])); 
 $buffer[$i]=(str_replace("\r", "", $buffer[$i]));

while (stristr($buffer[$i], ' ')){ 
 $buffer[$i]=(str_replace(" ", " ", $buffer[$i])); 
 } 
 } 
 $buffer_out.=$buffer[$i]; 
 } 
 $final=strlen($buffer_out); 
 $savings=($initial-$final)/$initial*100; 
 $savings=round($savings, 2); 
 $buffer_out.="\n<!--压缩前的大小: $initial bytes; 压缩后的大小: $final bytes; 节约:$savings% -->"; 
 return $buffer_out; 
 }

ob_start("wp_compress_html_main"); 
}

add_action('get_header', 'wp_compress_html');

使用方法很简单,只需要将上述代码置入WordPress主题目录的function.php中,即最后一个?>之前即可。

但笔者个人比较习惯将代码量较大的功能单独出来,做一个文件,然后在function.php中引入,如将上述代码新建一个wp-html-compression.php文件,放在主题include文件夹中,在function.php引入

include (TEMPLATEPATH . '/includes/wp-html-compression.php');

这样做的好处就是可以更高效的维护代码,同时也可以在主题后台很轻松的定制要不要启用前台代码压缩功能,当然多了一次引入会在效率上有一点点影响,不过function.php里面的代码就清爽了很多了,这个仁者见仁,看各位的习惯了。

前端代码压缩出现的bug

1、部分代码避免被压缩方法

此功能既然是压缩前端的代码,自然而然会将一些JS代码给压缩了,事实上有些JS被压缩后会失效,所以我们需要将这部分内容绕过压缩。只需要将你想绕过压缩的代码加个包裹层即可,代码如下

<!--wp-compress-html--><!--wp-compress-html no compression-->
这里的代码将会被保护起来,避免了压缩产生的异常情况
<!--wp-compress-html no compression--><!--wp-compress-html-->

注意:目前网上流传的绕过压缩的代码如下,使用者请自查。

<!--wp-compress-html no compression-->
错误的免压缩代码,部分主题使用
<!--wp-compress-html no compression-->

其实很多时候JS被压缩出错是因为JS中出现了//注释,试想下后面的空格被删除了,所有的代码将出现在//后面,相当于代码都被注释了,肯定会出错啊。最简单的解决办法就是删除注释或者使用闭合注释/*这里是注释*/,这样就可以避免后面的内容被注释掉了。

2、避免文章中高亮的代码被压缩

很多博文中会分享代码,当你使用代码高亮插件的时候再压缩前端代码,就会出现高亮失效的情况,如图:

纯代码为WordPress压缩前端html代码 附BUG修复

启用代码压缩前

纯代码为WordPress压缩前端html代码 附BUG修复

启用代码压缩后

原因很简答,代码高亮是将代码格式化,以优美的方式展示给读者;而压缩是直接将样式等修饰内容粗暴的删除,这样肯定会导致高亮失效的,只需要在function.php添加另外一段代码,就可以避免代码高亮被压缩了。

//避免含有代码高亮的文章内容被压缩
 function Code_Box($content) {
 $matches = array();
 //下面是查找代码高亮的关键词
 $c = "/(crayon-|<\/pre>)/i";
 if(preg_match_all($c, $content, $matches) && is_single()) {
 $content = '<!--wp-compress-html--><!--wp-compress-html no compression-->'.$content;
 $content.= '<!--wp-compress-html no compression--><!--wp-compress-html-->';
 }
 return $content;
}
add_filter( "the_content", "Code_Box" );

这段代码可以避免使用Crayon Syntax Highlighter和使用<pre>标签做的高亮被压缩,其他代码高亮插件请自行修改,不赘述。

前端代码压缩对于功能较多的网站有较为显著的加速效果,但比起来主机对加载速度的影响还是小很多了,所以这是个锦上添花的功能,而达不到雪中送炭的感觉,如果你想让你的WordPress网站更快一步,那就使用此功能吧。

文中代码参考了WP迷、张戈等多网站的代码,不一一列举,通通表示感谢!

本文最后更新于2017年3月29日,已超过 1 年没有更新,如果文章内容或图片资源失效,请留言反馈,我们会及时处理,谢谢!

如果认为本文对您有所帮助请赞助本站

支付宝扫一扫赞助微信扫一扫赞助

  • 支付宝扫一扫赞助
  • 微信扫一扫赞助
  • 声明:凡注明“本站原创”的所有文字图片等资料,版权均属 雅兮网 所有,欢迎转载,但务请注明出处;
    目前评论:9   其中:访客  0   博主  0
    加载中...
    1. 4年前 (2020-11-04) 0楼

      感谢分享,谢谢站长!!

    2. 8年前 (2016-11-12) 0楼

      值得推荐,自己使用的就是代码压缩

    3. 8年前 (2016-11-09) 0楼

      我有强迫症,不喜欢被压缩的代码

    4. 8年前 (2016-11-08) 0楼

      我以前用过这个,但早些时候我觉得代码被压缩后密密麻麻的,如果自己要查看自己网站的网页源代码或修改代码,查看起来非常的不方便(再有压缩的比率其实没多大),因而去掉了!

    5. 8年前 (2016-11-08) 0楼

      好好,先收藏

    6. 8年前 (2016-11-08) 0楼

      不错,学习了!

    7. 8年前 (2016-11-08) 0楼

      这个功能还是挺实用的

    8. 8年前 (2016-11-06) 0楼

      你广告赞助商很多啊

    发表评论

    疑问 调皮 难过 抠鼻 吓 微笑 可爱 坏笑 惊讶 发呆 疑问 大兵 偷笑 咒骂 发怒 白眼 鼓掌 得意 擦汗 亲亲 大哭 呲牙 晕 强

    分享 9 6 37,632
    Top