博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
压缩aspx页面,移除aspx多余的空格 供学习参考
阅读量:6869 次
发布时间:2019-06-26

本文共 2454 字,大约阅读时间需要 8 分钟。

 这种方法的优势在于发布之前压缩aspx,无须浪费web server的cpu 

两种方法实现: 
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);
       }

转载于:https://www.cnblogs.com/chaoa/archive/2012/03/09/2386116.html

你可能感兴趣的文章
linux之入门---U盘安装centos7.3
查看>>
运维Linux技巧
查看>>
熊掌号是什么及对小网站真的有保护作用吗?
查看>>
java虚拟机内存监控工具
查看>>
chmod命令、chown命令、umask命令、chattr命令、lsattr命令
查看>>
APP网站安全漏洞检测服务的详细介绍
查看>>
Knative Eventing 中如何实现 Registry 事件注册机制
查看>>
今天的学习
查看>>
Makefile有三个非常有用的变量。分别是$@,$^,$
查看>>
网络大厂和以色列研究团运用ML打造洪水预测模型
查看>>
Dart | 浅析dart中库的导入与拆分
查看>>
FFMpeg编程1 环境搭建
查看>>
SpringBoot | 第十八章:web应用开发之WebJars使用
查看>>
Web开发:我希望得到的编程学习路线图
查看>>
Hadoop Outline Part 3 (I/O - Avro)
查看>>
Ubuntu16.04下查看软件版本及安装位置
查看>>
hibernate的查询缓存 (转)
查看>>
Zend Framework 2 中,定制error 的layout
查看>>
避免linux并发导致的竞态发生
查看>>
Python学习--xml-ElementTree
查看>>