PHP写的mini_html函数,用于压缩html代码,减少网站数据传输量

[文章作者:磨延城 转载请注明原文出处: https://mo2g.com/view/75/ ]

之前写过一篇博客《玩转百度加速乐CDN,免费让自己的网站飞起来》,其中介绍了如何使用免费的CDN服务让小带宽的web服务器,支持更多的用户同时访问.一般情况下,服务器都会开启gzip压缩功能,就拿我的博客磨途歌首页​来举例,原始页面大小为63KB,经过nginx服务器的gzip压缩后,只需要下载11.9KB的数据,直接缩减了50多KB的数据量!

之前写过一篇博客《玩转百度加速乐CDN,免费让自己的网站飞起来》,其中介绍了如何使用免费的CDN服务让小带宽的web服务器,支持更多的用户同时访问。一般情况下,服务器都会开启gzip压缩功能,就拿我的博客磨途歌首页来举例,原始页面大小为63KB,经过nginx服务器的gzip压缩后,只需要下载11.9KB的数据,直接缩减了50多KB的数据量!

精简之前,原本1M的带宽只能同时支持2个用户访问;精简之后,能同时支持约为10个用户访问。这回一会,我再跟大家分享一个基于mPHP核心框架写的PHP函数mini_html,实现PHP压缩html代码,更进一步减少网站的数据传输量。原本63KB大小的首页,经过mini_html处理之后,页面缩减为38KB,再通过nginx的gzip压缩,浏览器只需要下载10.2KB的数据。

也许会有同学觉得mini_html处理后,只是减少了1.7KB的数据传输量,似乎没有必要这么大费周章。对于这一点,我觉得从多方面来分析:

1)页面缩减到了38KB,就为服务器的磁盘容量节省了25KB,差不多少了一半的占用空间。

2)对于每月有流量限制的朋友来说,每次访问都减少1.7KB,14%的流量,每月积累下来,效果非常可观。

3)搜索引擎方面,有一种建议,页面大小最好不要超过100KB。如果我们为搜索引擎的磁盘资源着想,我相信,搜索引擎也会为我们着想。

mini_html函数的使用例子如下:

<?php
include 'mini_html.php';
$html = '
<html>
<head>
<title>mini_html函数使用测试</title>
</head>
<body>
    a   b  c
    d   e  f
    <pre>
        a   b  c
        d   e  f
    </pre>
</body>
</html>';
echo mini_html($html);
/*
结果会输出
 <html><head><title>mini_html函数使用测试</title></head><body> a b c d e f <pre>
        a   b  c
        d   e  f
    </pre> </body></html>
*/

下边给出mini_html函数的实现代码,如果使用过程中有什么问题,可以给我留言。

/*
作者:moyancheng
最后更新时间:2013-05-17
最后更新时间:2013-12-13
功能:清除换行符、制表符、注释、多余空格
$html:要精简的Html代码
*/
function mini_html($html) {
    $arrData = preg_split( '/(<pre.*?\/pre>)/ms', $html, -1, PREG_SPLIT_DELIM_CAPTURE );
    $html = '';
    foreach ( $arrData as $str ) {
        if ( strpos( $str, '<pre' ) !== 0 ) {
            $str = preg_replace( '#/\*.+?\*/#s','', $str );//过滤脚本注释 /* */
            $str = preg_replace( '#(?<!:)(?<!\\\\)(?<!\')(?<!")//(?<!\')(?<!").*\n#','', $str );//过滤脚本注释 //
            $str = preg_replace( '#<!--[^\[<>].*[^\]!]-->#sU', '', $str );//移除html注释 <!-- --> 
            $str = preg_replace( '#[\n\r\t]+#', ' ', $str );//空格替换回车或tab
            $str = preg_replace( '#\s{2,}#', ' ', $str );//多个空格合并为一个空格
            $str = preg_replace( '#>\s<#', '><', $str );//移除标签间的空白
        }
        $html .= $str;
    }
    return $html;
}


评论:

  1. unknown 回复2015年06月06日 17时37分
    磨者
    好文章,内容远见卓识.禁止此消息:nolinkok@163.com
    西门塔尔牛 http://www.xmten.com/

  2. 我来说两句:

      切换  

    磨途歌检测发现,您当前使用的浏览器版本过低,要想使用画板模式,请先更新浏览器

      切换  

    磨途歌随机验证码