分类
Web编程

aspx最小化html 压缩html 去空字符

对网站的代码、资源的压缩,可以提高网站打开速度,减少请求次数,节省流量,提高用户体验等,好处肯定多了 最重要的是不用花一分钱。

我一直觉得一个优秀的站长,一定不能是开发者。我个人就是身有所处,开发者总希望把自己的程序优化到极致,无止尽的折腾,不断的最求完美。虽然说是细节可以决定成败,其实更多时候任何优化都不是关键,时机才是最重要的。说了这么多,又跑题了。。。

压缩包括web服务器的压缩,比如iis6,7就有动态压缩 静态压缩gzip,其实那些都是web服务器和解析的浏览器之间的压缩方式,如果你是个coder,当然还可以进一步的压缩。

之前应该介绍过使用AjaxMin,YUICompressor.NET等工具压缩css和js等文件(不记得是否真写过了)。至于html的压缩,在C#方向的资源比较少见,大家可以看ikanman.com,右键查看源代码,里面的html代码是没有任何空字符比如换行、空格和注释文字的,其实源码里面当然有 不然怎么看得懂呢。

原来我是用的是用正则的方式来去除空字符,代码如下:

protected string WhitespaceFilter(string html){
 html = Regex.Replace(html, "^\s*", string.Empty, RegexOptions.Compiled | RegexOptions.Multiline);
 html = Regex.Replace(html, "\r\n", string.Empty, RegexOptions.Compiled | RegexOptions.Multiline);
 html = Regex.Replace(html, "<!--*.*?-->", string.Empty, RegexOptions.Compiled | RegexOptions.Multiline);
 return html;
 }

如果希望压缩aspx自动输出的html代码,可以覆盖Render方法来实现,代码如下:

//把动态页面去空格 
 protected override void Render(HtmlTextWriter writer)
 {
 System.IO.StringWriter html = new System.IO.StringWriter();
 System.Web.UI.HtmlTextWriter tw = new System.Web.UI.HtmlTextWriter(html);
 base.Render(tw);
 tw.Close();
 string outhtml = html.ToString();
#if !DEBUG
 outhtml = WhitespaceFilter(outhtml);//去空格
#endif
 writer.Write(outhtml);
 }

注意#if !DEBUG的功能是在web.config里的debug=false的时候才去空格,这样可以在开发环境看到正常的代码。

但是处理的页面多了以后发现正则不那么好处理,因为html中代码注释的情况很多有的如下

<script>
<!--
或
<!--[if IE 6]><script type="text/javascript">document.execCommand("BackgroundImageCache", false, true);</script><![endif]-->

这些格式的代码也会被错误的过滤掉。于是发现了google code上有一个叫htmlcompressor开源项目,非常好用项目地址:https://code.google.com/p/htmlcompressor/,遗憾的是没有c#版本,只支持php和java,只好自己改了一个。用法如下:

HtmlCompressor compressor = new HtmlCompressor();
      compressor_html = compressor.compress(html);

是不是很方便呀,还有很多高级选项可以设定呢。详细用法请在官网查看吧!