php压缩HTML函数轻松实现压缩html/js/Css及注意事项


Posted in PHP onJanuary 27, 2013

压缩HTML的起因
如何提高网页加载速度 ,需要怎么对html页面优化相信是每个拟提高建站技术站长曾想到的问题,其实网页优化的方法还是很多。

有童鞋询问higrid如何 压缩HTML,也就是说能不能 把所有的html、js、Css在运行前都压缩成一行,清除注释标记、换行符、空格、制表符等。这样一个直接的好处是 减小html页面体积来提高前端加载速度。很多人认为启动gzip,但一般启动gzip都比较少对html启动gzip压缩,因为现在的html都是动态的,不会使用浏览器缓存,而启用gzip的话每次请求都需要压缩,会比较消耗服务器资源,对js,css启动gzip比较好是因为js,css都会使用缓存。而大家也用了很多软件过滤一下压缩,也有 在线js/css/html压缩工具,higrid觉得也很麻烦,可读性很差。higrid认为如果将压缩功能做成一个函数的话,这样开发者看到的是未压缩的状态,但访客访问时,服务端的程序将 html页面进行压缩,清除注释标记、换行符、空格、制表符等 来达到 减小了html体积的目的。 如果您经常访问higrid.net, 右键查看一下 html源代码 ,会看到本篇 html源代码经过了压缩处理。包括higrid.net 提供的免费内容管理系统 ,输出的都是压缩html,去掉了空白、换行符、制表符。但higrid.net 上面也有一些例外,就是higrid.net 主要推荐 在线表格 、在线图形 ,包括 jquery这些演示 ,为了方便访客,就没有启动压缩。

因此,higrid个人觉得 压缩html 的最大好处就是一本万利,只要写好了一次函数,以后在需要运用的时候调用一下就可以了,所有程序都可以使用,不会增加任何额外的开发工作。今天higrid就给大家分享几个个人觉得好用的函数,请大家不妨试试看,相信大家会喜欢。

采用php来压缩HTML
由于higrid对 php 比较感兴趣,所以使用 php来压缩HTML,当然使用其他语言也差不多,例如使用 asp来压缩HTML,道理应该一样的。

higrid将 压缩html的功能用php写成一个函数 ,其实网上这样的 php压缩函数 也很多,不信你可以百度或者谷歌,但多数不是很好用,特别在 压缩js 或 压缩CSS 的时候,主要原因是一些 压缩注释 等方面不同导致出现问题。 先看这个函数:

/** 
* 压缩html : 清除换行符,清除制表符,去掉注释标记 
* @param $string 
* @return压缩后的$string 
* */ 
function compress_html($string){ 
$string=str_replace("\r\n",'',$string);//清除换行符 
$string=str_replace("\n",'',$string);//清除换行符 
$string=str_replace("\t",'',$string);//清除制表符 
$pattern=array( 
"/> *([^ ]*) *</",//去掉注释标记 
"/[\s]+/", 
"/<!--[^!]*-->/", 
"/\" /", 
"/ \"/", 
"'/\*[^*]*\*/'" 
); 
$replace=array ( 
">\\1<", 
" ", 
"", 
"\"", 
"\"", 
"" 
); 
return preg_replace($pattern, $replace, $string); 
}

php来压缩HTML注意事项
php来压缩HTM 实现的方式主要是用正则表达式去查找,替换。在html压缩的时候,主要要注意下面几点:

1.HTML 文档中,多个空白字符等价为一个空白字符。也就是说换行等空白字符的删除是不安全的,有可能导致部分元素的样式产生差异。
2.html中有一个pre, 表示 preformatted text. 里面的任何空白,都不能被删除,因此pre,textarea 标签里面的内容格式需要保留,不能压缩。
3.HTML 中有可能有 IE 条件注释。这些条件注释是文档逻辑的一部分,不能被删除。因此去掉html注释的时候,有些注释是不能去掉的,比如:
4.压缩嵌入式js中的注释要注意,因为可能注释符号会出现在字符串中,比如: var url = "http://www.higrid.net"; // 前面的//不是注释
5.对于动态页面来说,HTML 的压缩有可能还会增加服务器的 CPU 负担,得不偿失

higrid使用的php压缩html函数代码
由于注释对代码有作用,higrid使用的php压缩html函数代码 没有去掉注释,直接上代码。

function higrid_compress_html($higrid_uncompress_html_source ) 
{ 
$chunks = preg_split( '/(<pre.*?\/pre>)/ms', $higrid_uncompress_html_source, -1, PREG_SPLIT_DELIM_CAPTURE ); 
$higrid_uncompress_html_source = '';//[higrid.net]修改压缩html : 清除换行符,清除制表符,去掉注释标记 
foreach ( $chunks as $c ) 
{ 
if ( strpos( $c, '<pre' ) !== 0 ) 
{ 
//[higrid.net] remove new lines & tabs 
$c = preg_replace( '/[\\n\\r\\t]+/', ' ', $c ); 
// [higrid.net] remove extra whitespace 
$c = preg_replace( '/\\s{2,}/', ' ', $c ); 
// [higrid.net] remove inter-tag whitespace 
$c = preg_replace( '/>\\s</', '><', $c ); 
// [higrid.net] remove CSS & JS comments 
$c = preg_replace( '/\\/\\*.*?\\*\\//i', '', $c ); 
} 
$higrid_uncompress_html_source .= $c; 
} 
return $higrid_uncompress_html_source; 
}

php压缩html函数代码总结
有些童鞋不 推荐压缩html , 主要原因除了上面所说的 php来压缩HTML注意事项 外,通过 gzip 压缩已经能达到很好的效果。另外,因为产生影响HTML的角色太多(静态,动态,前端动态),也没什么量化指标,所以很难控制压缩成什么样(代码写成什么程度)。代码更需要考虑执行效率,而不是传输效率。对于动态页面来说,HTML 的压缩有可能还会增加服务器的 CPU 负担,得不偿失。Google的压缩网页 是因为早期他希望首页文本尽可能控制在一个或两个包内,而且他的首页太重要了,流量也很离谱。压缩一个字节,总流量一算都是个不小的数字,自然也就是必要之举了。进一步的压缩存在问题,除非能像 Google 一样充分测试(Google 也仅压缩了少部分核心服务的页面),否则不推荐对 HTML 进行压缩处理。

但使用higrid.net 的 php压缩html函数 代码,能很好的解决这个问题。好了,还不快试试。

PHP 相关文章推荐
PHP数组无限分级数据的层级化处理代码
Dec 29 PHP
使用PHP计算两个路径的相对路径
Jun 14 PHP
php显示时间常用方法小结
Jun 05 PHP
php数组函数array_key_exists()小结
Dec 10 PHP
PHP获取用户访问IP地址的5种方法
May 16 PHP
PHP实现二维数组根据key进行排序的方法
Dec 30 PHP
数组任意位置插入元素,删除特定元素的实例
Mar 02 PHP
php实现和c#一致的DES加密解密实例
Jul 24 PHP
基于php双引号中访问数组元素报错的解决方法
Feb 01 PHP
PHP生成指定范围内的N个不重复的随机数
Mar 18 PHP
laravel 解决paginate查询多个字段报错的问题
Oct 22 PHP
PHP遍历数组的6种方式总结
Nov 17 PHP
用php来改写404错误页让你的页面更友好
Jan 24 #PHP
php对大文件进行读取操作的实现代码
Jan 23 #PHP
php删除与复制文件夹及其文件夹下所有文件的实现代码
Jan 23 #PHP
php删除文件夹及其文件夹下所有文件的函数代码
Jan 23 #PHP
php定时删除文件夹下文件(清理缓存文件)
Jan 23 #PHP
PHP关联数组的10个操作技巧
Jan 21 #PHP
用PHP即时捕捉PHP中的错误并发送email通知的实现代码
Jan 19 #PHP
You might like
追忆往昔!浅谈收音机的百年发展历史
2021/03/01 无线电
php Static关键字实用方法
2010/06/04 PHP
php XPath对XML文件查找及修改实现代码
2011/07/27 PHP
利用PHP将部分内容用星号替换
2020/04/21 PHP
PHP计算当前坐标3公里内4个角落的最大最小经纬度实例
2016/02/26 PHP
Ajax PHP JavaScript MySQL实现简易无刷新在线聊天室
2016/08/17 PHP
PHP实现UTF8二进制及明文字符串的转化功能示例
2017/11/20 PHP
javascript XML数据显示为HTML一例
2008/12/23 Javascript
jquery实现滑屏大图定时收缩为小banner图片的广告代码
2015/09/02 Javascript
javascript for-in有序遍历json数据并探讨各个浏览器差异
2015/11/30 Javascript
详解Bootstrap glyphicons字体图标
2016/01/04 Javascript
浅析JavaScript中的变量复制、参数传递和作用域链
2016/01/13 Javascript
页面向下滚动ajax获取数据的实现方法(兼容手机)
2016/05/24 Javascript
JS仿hao123导航页面图片轮播效果
2016/09/01 Javascript
bootstrapValidator自定验证方法写法
2016/12/01 Javascript
javascript实现下雨效果
2017/03/27 Javascript
Node.js+jade抓取博客所有文章生成静态html文件的实例
2017/09/19 Javascript
js正则取值的结果数组调试方法
2018/10/10 Javascript
从零开始在NPM上发布一个Vue组件的方法步骤
2018/12/20 Javascript
js canvas实现橡皮擦效果
2018/12/20 Javascript
js实现上传按钮并显示缩略图小轮子
2020/05/04 Javascript
Vue+Spring Boot简单用户登录(附Demo)
2020/11/12 Javascript
[01:15:15]VG VS EG Supermajor小组赛B组胜者组第一轮 BO3第二场 6.2
2018/06/03 DOTA
详解python函数传参是传值还是传引用
2018/01/16 Python
Linux CentOS7下安装python3 的方法
2018/01/21 Python
python如何为创建大量实例节省内存
2018/03/20 Python
Pycharm设置界面全黑的方法
2018/05/23 Python
django如何连接已存在数据的数据库
2018/08/14 Python
详解python如何在django中为用户模型添加自定义权限
2018/10/15 Python
Windows下安装Scrapy
2018/10/17 Python
澳大利亚买卖正宗二手奢侈品交易平台:Luxe.It.Fwd
2019/10/16 全球购物
建筑工地门卫岗位职责
2014/04/30 职场文书
基层党员对照检查材料
2014/09/24 职场文书
贫困生助学金感谢信
2015/01/21 职场文书
nginx优化的六点方法
2021/03/31 Servers
react中useState使用:如何实现在当前表格直接更改数据
2022/08/05 Javascript