纯代码压缩wordpress前端Html

纯代码压缩wordpress前端Html

为了优化网站的访问速度,对网页进行压缩是非常不错的一条方法。尽管说压缩 wordpress 页面后对查看源代码来说不太友好,更可以说是惨目忍睹。但是对于那些本身前端就引用了很多js和css的主题来说是个不错的选择

wordpress压缩前端的插件有很多,其中比较有名的就是 Autoptimize 这款轻量级插件。

下面我将用纯代码的方式实现前端压缩,网上也有相应的代码压缩前端,但是网上的代码与最新的wordpress不兼容。

将一下代码粘贴至主题的functions.php文件

class FLHM_HTML_Compression{protected $flhm_compress_css = true;protected $flhm_compress_js = true;protected $flhm_info_comment = true;protected $flhm_remove_comments = true;protected $html;public function __construct($html){if (!empty($html)){$this->flhm_parseHTML($html);}}public function __toString(){return $this->html;}protected function flhm_bottomComment($raw, $compressed){$raw = strlen($raw);$compressed = strlen($compressed);$savings = ($raw-$compressed) / $raw * 100;$savings = round($savings, 2);return '<!--HTML compressed, size saved '.$savings.'%. From '.$raw.' bytes, now '.$compressed.' bytes-->';}protected function flhm_minifyHTML($html){$pattern = '/<(?<script>script).*?<\/script\s*>|<(?<style>style).*?<\/style\s*>|<!(?<comment>--).*?-->|<(?<tag>[\/\w.:-]*)(?:".*?"|\'.*?\'|[^\'">]+)*>|(?<text>((<[^!\/\w.:-])?[^<]*)+)|/si';preg_match_all($pattern, $html, $matches, PREG_SET_ORDER);$overriding = false;$raw_tag = false;$html = '';foreach ($matches as $token){$tag = (isset($token['tag'])) ? strtolower($token['tag']) : null;$content = $token[0];if (is_null($tag)){if ( !empty($token['script']) ){$strip = $this->flhm_compress_js;}else if ( !empty($token['style']) ){$strip = $this->flhm_compress_css;}else if ($content == '<!--wp-html-compression no compression-->'){$overriding = !$overriding; continue;}else if ($this->flhm_remove_comments){if (!$overriding && $raw_tag != 'textarea'){$content = preg_replace('/<!--(?!\s*(?:\[if [^\]]+]|<!|>))(?:(?!-->).)*-->/s', '', $content);}}}else{if ($tag == 'pre' || $tag == 'textarea'){$raw_tag = $tag;}else if ($tag == '/pre' || $tag == '/textarea'){$raw_tag = false;}else{if ($raw_tag || $overriding){$strip = false;}else{$strip = true; $content = preg_replace('/(\s+)(\w++(?<!\baction|\balt|\bcontent|\bsrc)="")/', '$1', $content); $content = str_replace(' />', '/>', $content);}}} if ($strip){$content = $this->flhm_removeWhiteSpace($content);}$html .= $content;} return $html;} public function flhm_parseHTML($html){$this->html = $this->flhm_minifyHTML($html);if ($this->flhm_info_comment){$this->html .= "\n" . $this->flhm_bottomComment($html, $this->html);}}protected function flhm_removeWhiteSpace($str){$str = str_replace("\t", ' ', $str);$str = str_replace("\n",  '', $str);$str = str_replace("\r",  '', $str);while (stristr($str, '  ')){$str = str_replace('  ', ' ', $str);}   return $str;}}function flhm_wp_html_compression_finish($html){return new FLHM_HTML_Compression($html);}function flhm_wp_html_compression_start(){ob_start('flhm_wp_html_compression_finish');}add_action('get_header', 'flhm_wp_html_compression_start');

这样你会发现前端已经压缩,并且兼容最新版的wordpress。

注意

如果出现js错误

//将这段改为
protected $flhm_compress_js = true;
protected $flhm_compress_js = false;

压缩详细效果图见本站。

分享

EvenYan

一90后在读计算专业大学生,擅长各种语言的hello world以及安装各种软件。
guest
0 评论
内联反馈
查看所有评论