压缩aspx页面删除多余空格的两种方法
来源: 阅读:828 次 日期:2014-08-28 16:22:47
温馨提示: 小编为您整理了“压缩aspx页面删除多余空格的两种方法”,方便广大网友查阅!

这篇文章主要介绍了压缩aspx页面移除多余空格的两种方法,可以在发布页面之前压缩aspx,无须浪费web server的cpu,需要的朋友可以参考下

两种方法实现:

1)一行一行的读取aspx文件然后处理

2)一次性读取aspx文件然后处理

处理逻辑:

替换" "为" "(将两个空格替换为一个空格),将所有的换行符替换为空字符(极限压缩)

注意事项:

1)一行一行处理在极限压缩的情况下需要额外的处理服务端控件换行的情况,比如

代码如下:

Line 1:

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;

}

///

/// 压缩指定路径的文件空白字符串和换行符

/// 压缩说明

/// 1)采取File.ReadAllLines读取所有行每一行做处理工作

/// 2)服务器控件最好写在一行内,只做了尾部标签与runat="server"跨行的处理,开始标签跨行为处理

/// 3)文件不能有单行注释"//"

/// 4)替换掉了换行符和空格

///

/// 文件路径

public static void CompressLineByLine(String filePath)

{

if (!File.Exists(filePath))

{

Console.WriteLine("文件不存在,检查路径{0}", filePath);

return;

}

var start = DateTime.Now;

Console.WriteLine("正在压缩文件:{0}rn开始于{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("rn", "");

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("====耗时====rn{0}rn", end - start);

}

///

/// 压缩指定路径的文件空白字符串和换行符

/// 压缩说明

/// 1)一次性读取出所有的文本替换掉换行符和空白

/// 2)无须处理服务器控件换行的问题

/// 3)压缩不彻底,A元素的结束标签和B开始标签之间可能仍然有一个空格

///

///

public static void CompressAtOneTime(String filePath)

{

var start = DateTime.Now;

Console.WriteLine("正在压缩文件:{0}rn开始于{1}...", filePath,

start.ToString());

var lines = File.ReadAllText(filePath);

File.WriteAllText(filePath, Replace(Replace(lines, "rn",

"")," "," "), Encoding.GetEncoding("GB2312"));

var end = DateTime.Now;

Console.WriteLine("结束于{0}...", end.ToString());

Console.WriteLine("====耗时====rn{0}rn", end - start);

}

更多信息请查看IT技术专栏

更多信息请查看 网络编程
由于各方面情况的不断调整与变化, 提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!
关于我们| 联系我们| 人才招聘| 网站声明| 网站帮助| 非正式的简要咨询| 简要咨询须知| 加入群交流| 手机站点| 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 云南省教育厅备案号:云教ICP备0901021 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65317125(9:00—18:00) 获取招聘考试信息及咨询关注公众号:
咨询QQ:526150442(9:00—18:00) 版权所有:
云南网警报警专用图标
Baidu
map