压缩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函数的使用例子如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
<?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函数的实现代码,如果使用过程中有什么问题,可以给我留言。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
/* 作者: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 ; } |