压缩aspx页面删除多余空格的两种方法

所属分类: 网络编程 / ASP.NET 阅读数: 382
收藏 0 赞 0 分享

两种方法实现:
1)一行一行的读取aspx文件然后处理
2)一次性读取aspx文件然后处理 
处理逻辑:
替换"  "为" "(将两个空格替换为一个空格),将所有的换行符替换为空字符(极限压缩)
注意事项:
1)一行一行处理在极限压缩的情况下需要额外的处理服务端控件换行的情况,比如

复制代码 代码如下:

Line 1:<asp:Label  runat="server"
Line 2: ID="lb1"   ....
Line 3:.../> 

这种情况 一行一行处理会出问题

2) 另外JS脚本中内联的单行注释
推荐使用"/**/"代替"//"
使用结果:

一行行的处理比一次性处理稍快,对于两三百行的aspx文件,差距在毫秒级别。不过对整个项目进行处理,随着文件数增多,差距应该会体现出来。
一次性读取处理可以不使用极限压缩,这样服务器控件和内联单行注释的问题可以不用考虑。
我一般很少使用内联注释和单行注释以及服务器控件所以压缩效果非常明显,一般500-600行的源码压缩后不到50行,大小减少约三分之一。
不过这种压缩效果可能和你是否使用服务端数据列表控件以及如何使用有很大的关系 ,我一般只使用repeater。

复制代码 代码如下:

public static String Replace(String source,String oldStr,String newStr)
       {
           int count = Regex.Matches(source, oldStr).Count;
           for (int i = 0; i < count; i++)
           {
               source = source.Replace(oldStr, newStr);
           }
           return source;
       }

       /// <summary>
       /// 压缩指定路径的文件空白字符串和换行符
       /// 压缩说明
       /// 1)采取File.ReadAllLines读取所有行每一行做处理工作
       /// 2)服务器控件最好写在一行内,只做了尾部标签与runat="server"跨行的处理,开始标签跨行为处理
       /// 3)文件不能有单行注释"//"
       /// 4)替换掉了换行符和空格
       /// </summary>
       /// <param name="filePath">文件路径</param>
       public static void CompressLineByLine(String filePath)
       {
           if (!File.Exists(filePath))
           {
               Console.WriteLine("文件不存在,检查路径{0}", filePath);
               return;
           }
           var start = DateTime.Now;
           Console.WriteLine("正在压缩文件:{0}\r\n开始于{1}...",
filePath,start.ToString());
           var lines = File.ReadAllLines(filePath,
Encoding.GetEncoding("GB2312"));
           for (int i = 0; i < lines.Length; i++)
           {
               var item = lines[i].Trim();
               if (item.IndexOf("runat=\"server\"") > -1)
                   item += " ";
               item = item.Replace("\r\n", "");
               item = Replace(item, "  ", " ");
               lines[i] = item;
           }
           File.WriteAllText(filePath, string.Join("", lines),
Encoding.GetEncoding("GB2312"));
           var end = DateTime.Now;
           Console.WriteLine("结束于{0}...", end.ToString());
           Console.WriteLine("====耗时====\r\n{0}\r\n", end - start);
       }

       /// <summary>
       /// 压缩指定路径的文件空白字符串和换行符
       /// 压缩说明
       /// 1)一次性读取出所有的文本替换掉换行符和空白
       /// 2)无须处理服务器控件换行的问题
       /// 3)压缩不彻底,A元素的结束标签和B开始标签之间可能仍然有一个空格
       /// </summary>
       /// <param name="filePath"></param>
       public static void CompressAtOneTime(String filePath)
       {
           var start = DateTime.Now;
           Console.WriteLine("正在压缩文件:{0}\r\n开始于{1}...", filePath,
start.ToString());
           var lines = File.ReadAllText(filePath);
           File.WriteAllText(filePath, Replace(Replace(lines, "\r\n",
""),"  "," "), Encoding.GetEncoding("GB2312"));
           var end = DateTime.Now;
           Console.WriteLine("结束于{0}...", end.ToString());
           Console.WriteLine("====耗时====\r\n{0}\r\n", end - start);
       }

更多精彩内容其他人还在看

asp.net 虚方法、抽象方法、接口疑问

asp.net 虚方法、抽象方法、接口疑问等说明。
收藏 0 赞 0 分享

c#  操作符?? null coalescing operator

?? "null coalescing" operator 是c#新提供的一个操作符,这个操作符提供的功能是判断左侧的操作数是否是null,如果是则返回结果是右侧的操作数;非null则返回左侧的操作数。
收藏 0 赞 0 分享

.net 反序题目的详细解答第1/2页

在各种答案,以及平时面试过程中,这道题总归会有一些非常典型的错误发生。其中给老赵的感觉也非常有意思,不知其中的“思路”是否如老赵猜测那样。
收藏 0 赞 0 分享

implicitly convert type 'int' to 'short'的原因与解决方法

implicitly convert type 'int' to 'short'的原因与解决方法
收藏 0 赞 0 分享

比较完整的 asp.net 学习流程

好多朋友想学习后台编程语言,但请注意的事,学习后台是个循序渐进的过程,不可能一下就到位,其实不只是asp.net其它的编程语言都需要下面的一些知识。
收藏 0 赞 0 分享

官网 Ext direct包中.NET版的问题

下载了官网的 Ext direct 包进行研究,发现服务器端返回结果存在一点小问题。
收藏 0 赞 0 分享

C# XML操作 代码大全(读XML,写XML,更新,删除节点,与dataset结合等)第1/2页

C#操作XML(读XML,写XML,更新,删除节点,与dataset结合等),以下就是操作XML的所有方法,相信可以满足很大一部份的使用了。
收藏 0 赞 0 分享

c# 连接字符串数据库服务器端口号 .net状态服务器端口号

正常的数据库连接字符串配置,这是在MSSQL服务器端口是1433(默认)的情况下。
收藏 0 赞 0 分享

ASP.NET 路径问题的解决方法

相对路径和绝对路径在ASP.NET中可以用~/来解决.
收藏 0 赞 0 分享

asp.net TemplateField模板中的Bind方法和Eval方法

在TemplateField模板中为了能够有限制的或者取出数据库中某列的值时,可以用Bind和Eval方法来实现。以下是Bind方法的格式,Eval的格式也是和Bind一样的。 Bind("列的名称","显示的格式文")
收藏 0 赞 0 分享
查看更多