缩小ASP.NET应用程序的HTML输出

e4yzc0pl  于 11个月前  发布在  .NET
关注(0)|答案(7)|浏览(111)

有哪些方法可以减少由asp.net应用程序发送的HTML响应的大小?
我使用的控件不属于我,它产生的输出与白色空间。我有兴趣缩小整个HTML输出的页面就像谷歌(查看源www.google.com),以改善时间。
是否有任何实用程序类可用于ASP.NET,可以为我做这件事?

kr98yfug

kr98yfug1#

不需要在运行时执行,因为它可以在编译时执行。
详细信息:http://omari-o.blogspot.com/2009/09/aspnet-white-space-cleaning-with-no.html

polkgigr

polkgigr3#

对于Microsoft .NET平台,有一个名为WebMarkupMin的库,它可以生成HTML代码的缩小版。对于每个ASP.NET框架,都有自己的模块:

文档可从-http://webmarkupmin.codeplex.com/documentation获得

x4shl7ld

x4shl7ld4#

我想评论一下Thorn的建议(但我对堆栈溢出是个新手)。
1.链接的代码(omari-o.blogspot.com)不支持MVC 4,尽管代码是开源的,但由于MVC 3和MVC 4之间的制动变化,它不能轻易升级。
1.在运行时,可能会有空白写入http结果,只有实际网站的开发人员才能知道。因此,模板文件的静态缩小(aspx)根本不是万无一失的。动态缩小,这是由gius建议的,应该用来保证空白被正确删除,不幸的是,这将导致运行时计算成本。如果代码动态将空格写入输出,它将不得不被删除动态

kuarbcqp

kuarbcqp5#

公认的答案不适用于MVC 4,所以这里有一个类似的库,它在构建时缩小了https://github.com/jitbit/HtmlOptimizerMvc4

62o28rlo

62o28rlo6#

只是添加另一个选项,我没有看到这里列出,这是一个我建议使用:
Html minifier command line tool
用法:herehere
然而,这个工具有一个问题:它留下单行(//)注解,并且它会导致Razor解析的问题,因为单行注解放置在C#块中,如下所示:

@{
  ... 
  ...
  // anything
  ...
}

字符串
将导致Razor解析器从这一点开始忽略行的其余部分的缩小输出,从而引发一个错误,指出它无法找到块的结尾“}”。
我解决这个问题的方法是从输出中完全删除这些注解。这样就可以了。要做到这一点,只需从第145行删除RegexOptions.SingleLine:

htmlContents = Regex.Replace(htmlContents, @"//(.*?)\r?\n", ""/*, RegexOptions.Singleline*/);

vmjh9lq9

vmjh9lq97#

在母版页或Web表单页的后面,Page_Load事件之前使用此函数:

protected override void Render(HtmlTextWriter writer)
{
    if (this.Request.Headers["X-MicrosoftAjax"] != "Delta=true")
    {
        System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(@"<script[^>]*>[\w|\t|\r|\W]*?</script>");
        System.Text.StringBuilder sb = new System.Text.StringBuilder();
        System.IO.StringWriter sw = new System.IO.StringWriter(sb);
        HtmlTextWriter hw = new HtmlTextWriter(sw);
        base.Render(hw);
        string html = sb.ToString();
        System.Text.RegularExpressions.MatchCollection mymatch = reg.Matches(html);
        html = reg.Replace(html, string.Empty);
        reg = new System.Text.RegularExpressions.Regex(@"(?<=[^])\t{2,}|(?<=[>])\s{2,}(?=[<])|(?<=[>])\s{2,11}(?=[<])|(?=[\n])\s{2,}|(?=[\r])\s{2,}");
        html = reg.Replace(html, string.Empty);
        reg = new System.Text.RegularExpressions.Regex(@"</body>");
        string str = string.Empty;
        foreach (System.Text.RegularExpressions.Match match in mymatch)
        {
            str += match.ToString();
        }
        html = reg.Replace(html, str + "</body>");
        writer.Write(html);
    }
    else
    {
        base.Render(writer);
    }
}

字符串

相关问题