两种方法实现:
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);
}
压缩aspx页面,删除多余空格
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。