压缩HTML的起因
@H_301_2@如何提高网页加载速度 ,需要怎么对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
@H_301_2@由于higrid对 PHP 比较感兴趣,所以使用 PHP来压缩HTML,当然使用其他语言也差不多,例如使用 asp来压缩HTML,道理应该一样的。 higrid将 压缩html的功能用PHP写成一个函数 ,其实网上这样的 PHP压缩函数 也很多,不信你可以百度或者谷歌,但多数不是很好用,特别在 压缩js 或 压缩CSS 的时候,主要原因是一些 压缩注释 等方面不同导致出现问题。 先看这个函数: @H_301_2@ 代码如下:
301_2@/** @H_301_2@* 压缩html : 清除换行符,清除制表符,去掉注释标记 @H_301_2@* @param $string @H_301_2@* @return压缩后的$string @H_301_2@* */ @H_301_2@function compress_html($string){ @H_301_2@$string=str_replace("\r\n",'',$string);//清除换行符 @H_301_2@$string=str_replace("\n",$string);//清除换行符 @H_301_2@$string=str_replace("\t",$string);//清除制表符 @H_301_2@$pattern=array( @H_301_2@"/> *([^ ]*) *",//去掉注释标记 @H_301_2@"/[\s]+/",@H_301_2@"//",@H_301_2@"/\" /",@H_301_2@"/ \"/",@H_301_2@"'/\*[^*]*\*/'" @H_301_2@); @H_301_2@$replace=array ( @H_301_2@">\\1<",@H_301_2@" ",@H_301_2@"",@H_301_2@"\"",@H_301_2@"" @H_301_2@); @H_301_2@return preg_replace($pattern,$replace,$string); @H_301_2@} @H_301_2@
@H_301_2@PHP来压缩HTML注意事项
@H_301_2@PHP来压缩HTM 实现的方式主要是用正则表达式去查找,替换。在html压缩的时候,主要要注意下面几点: 1.HTML 文档中,多个空白字符等价为一个空白字符。也就是说换行等空白字符的删除是不安全的,有可能导致部分元素的样式产生差异。 @H_301_2@2.html中有一个pre,表示 preformatted text. 里面的任何空白,都不能被删除,因此pre,textarea 标签里面的内容格式需要保留,不能压缩。 @H_301_2@3.HTML 中有可能有 IE 条件注释。这些条件注释是文档逻辑的一部分,不能被删除。因此去掉html注释的时候,有些注释是不能去掉的,比如: @H_301_2@4.压缩嵌入式js中的注释要注意,因为可能注释符号会出现在字符串中,比如: var url = "http://www.higrid.net"; // 前面的//不是注释 @H_301_2@5.对于动态页面来说,HTML 的压缩有可能还会增加服务器的 cpu 负担,得不偿失higrid使用的PHP压缩html函数代码
@H_301_2@由于注释对代码有作用,higrid使用的PHP压缩html函数代码 没有去掉注释,直接上代码。 @H_301_2@ 代码如下:
301_2@function higrid_compress_html($higrid_uncompress_html_source ) @H_301_2@{ @H_301_2@$chunks = preg_split( '/()/ms',$higrid_uncompress_html_source,-1,PREG_SPLIT_DELIM_CAPTURE ); @H_301_2@$higrid_uncompress_html_source = '';//[higrid.net]修改压缩html : 清除换行符,去掉注释标记 @H_301_2@foreach ( $chunks as $c ) @H_301_2@{ @H_301_2@if ( strpos( $c,'
@H_301_2@301_2@{ @H_301_2@//[higrid.net] remove new lines & tabs @H_301_2@$c = preg_replace( '/[\\n\\r\\t]+/',' ',$c ); @H_301_2@// [higrid.net] remove extra whitespace @H_301_2@$c = preg_replace( '/\\s{2,}/',$c ); @H_301_2@// [higrid.net] remove inter-tag whitespace @H_301_2@$c = preg_replace( '/>\\s','><',$c ); @H_301_2@// [higrid.net] remove CSS & JS comments @H_301_2@$c = preg_replace( '/\\/\\*.*?\\*\\//i',$c ); @H_301_2@} @H_301_2@$higrid_uncompress_html_source .= $c; @H_301_2@} @H_301_2@return $higrid_uncompress_html_source; @H_301_2@} @H_301_2@