05月21, 2018

ThinkPHP5.1压缩HTML

自从做了前端,已经好久没有写过PHP代码了,想起上一次使用ThinkPHP还是在它还是3.2的版本的时候了,现在一看版本都已经更新到5.1了。

由于某些原因,重拾TP,写法结构还是跟3.2版本大致差不多,但做了一些优化,同时PHP方面也已经升级到7.0X了。

然而编写页面的时候,发现TP并没有提供压缩页面代码的机制或者插件,当然也有可能是出于性能考虑,输出压缩后的HTML代码本质上来说是字符串的替换,替换掉模板中的换行、制表和空格之类的多余字符串,在某些情况下,比如模板文件特别大,这个时候大量的字符串替换是会影响性能的。

但是从另一方面来说,压缩了HTML后,整个文档的大小是变小的,所以用户载入文档的时间是减少的。

上面说到,要压缩文档,其实就是替换掉HTML中的换行、制表和空格之类的多余字符串。那么只需要一个正则就即可实现。找了一遍文档,发现TP5.1提供一个视图过滤功能,那么我们只需要在这个视图过滤中做一下正则替换即可,代码如下:

protected function initialize(){
    $this->view->filter(function($content){
        $find = array('~>\s+<~', '~>(\s+)~', '~(\s+)<~','~[\r\n]+~', '~[\s]{2,}~');
        $replace = array('><', '>', '<', ' ', ' ');
        $content = preg_replace($find, $replace, $content);
        return $content;
    });
}

只需要在initialize函数中注册过滤器即可,你也可以将这段代码提取出来,以便其他地方调用。

最终效果如下:

ThinkPHP5.1压缩HTML

本文链接:https://luodao.me/post/thinkphp5.1-compress-html.html

-- EOF --

Comments

评论加载中...

注:如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理。