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

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

(0)

相关推荐

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

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

  • Ajax解决多余刷新的两种方法(总结)

    控制器Servlet则提供了简单的改变: 对于Ajax系统而言,服务器响应无须是整个页面内容,可以仅是 必需的数据,控制器不能将数据请求转发到jsp页面. 此时控制器有两个选择: 1.直接生成简单的响应数据. 在这种模式下,Servlet直接通过response获取页面输出流,通过 输出流生成字符响应. package pers.zkr.chat.web; import java.io.IOException; import java.io.PrintWriter; import javax.s

  • 正则表达式实现字符串每4位后自动加空格效果(两种方法)

    需求:输入框中输入银行卡号(或其他)时,每4位自动加空格(如下图) 分析 方法一:监控输入框的keyup事件,当value值的长度为4,8,12,16时,插入空格字符串" "(vue中代码片段如下) <input type="text" v-model="bankCard" @keyup="bankCardKeyup"> bankCardKeyup (e) { let self = this // 如果是删除键,则

  • 微信小程序页面间值传递的两种方法

    一:url带参数传递 与前端语言一样,小程序页面间的传递可以通过在路由url后接参数,路由的同时会将参数一并传递到新的页面. index.wxml: <!--index.wxml--> <view class="container"> <!-- 使用navigator组件 --> <navigator url="../demo/demo?title=参数传递">title=参数传递</navigator>

  • Vue.js项目中管理每个页面的头部标签的两种方法

    在 Vue SPA 应用中,如果想要修改 HTML 的头部标签,如页面的 title ,我们只能去修改 index.html 模板文件,但是这个是全局的修改,如何为每个页面都设置不一样的 title 呢?下面介绍两种方法. 使用router.meta 在路由里面配置每个路由的地址: routes: [ { /* (首页)默认路由地址 */ path: '/', name: 'Entrance', component: Entrance, meta: { title: '首页入口' } }, {

  • 在页面中引入js的两种方法(推荐)

    在页面中引入js有两种基本方式:在页面中嵌入js.引用外部js文件. 一.在页面中嵌入js 这是在页面使用js最简单的方式了,一般我在写个小测试的情况下会用这种方式. 把script元素写在</body>前面,script元素的内容就是js代码.像这样: <script> // 在这里写js function test(){ alert('说点什么呢'); } test(); </script> 二.引用外部js文件 引用外部js文件,可以使js文件和HTML文件相分离

  • jquery判断页面网址是否有效的两种方法

    方法一:(jQuery方法: 适用所有浏览器) HTML页面: <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <script type="text/javascript" src="js/jquery-1.7.1.min.js">&l

  • asp.net 删除MFC单文档默认菜单栏的两种方法

    有两种方法: 第一种方法:重载框架类的Create函数,具体代码如下: 复制代码 代码如下: BOOL CMainFrame::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle , const RECT& rect , CWnd* pParentWnd , LPCTSTR lpszMenuName , DWORD dwExStyle , CCreateContext* pContext) {     // TO

  • Python实现删除排序数组中重复项的两种方法示例

    本文实例讲述了Python实现删除排序数组中重复项的两种方法.分享给大家供大家参考,具体如下: 对于给定的有序数组nums,移除数组中存在的重复数字,确保每个数字只出现一次并返回新数组的长度 注意:不能为新数组申请额外的空间,只允许申请O(1)的额外空间修改输入数组 Example 1: Given nums = [1,1,2], Your function should return length = 2, with the first two elements of nums being 1

  • iOS实现图片压缩的两种方法及图片压缩上传功能

    两种压缩图片的方法:压缩图片质量(Quality),压缩图片尺寸(Size). 压缩图片质量 NSData *data = UIImageJPEGRepresentation(image, compression); UIImage *resultImage = [UIImage imageWithData:data]; 通过 UIImage 和 NSData 的相互转化,减小 JPEG 图片的质量来压缩图片.UIImageJPEGRepresentation:: 第二个参数 compressi

随机推荐