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

e4yzc0pl  于 2023-11-20  发布在  .NET
关注(0)|答案(7)|浏览(169)

有哪些方法可以减少由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#块中,如下所示:

  1. @{
  2. ...
  3. ...
  4. // anything
  5. ...
  6. }

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

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

展开查看全部
vmjh9lq9

vmjh9lq97#

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

  1. protected override void Render(HtmlTextWriter writer)
  2. {
  3. if (this.Request.Headers["X-MicrosoftAjax"] != "Delta=true")
  4. {
  5. System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(@"<script[^>]*>[\w|\t|\r|\W]*?</script>");
  6. System.Text.StringBuilder sb = new System.Text.StringBuilder();
  7. System.IO.StringWriter sw = new System.IO.StringWriter(sb);
  8. HtmlTextWriter hw = new HtmlTextWriter(sw);
  9. base.Render(hw);
  10. string html = sb.ToString();
  11. System.Text.RegularExpressions.MatchCollection mymatch = reg.Matches(html);
  12. html = reg.Replace(html, string.Empty);
  13. reg = new System.Text.RegularExpressions.Regex(@"(?<=[^])\t{2,}|(?<=[>])\s{2,}(?=[<])|(?<=[>])\s{2,11}(?=[<])|(?=[\n])\s{2,}|(?=[\r])\s{2,}");
  14. html = reg.Replace(html, string.Empty);
  15. reg = new System.Text.RegularExpressions.Regex(@"</body>");
  16. string str = string.Empty;
  17. foreach (System.Text.RegularExpressions.Match match in mymatch)
  18. {
  19. str += match.ToString();
  20. }
  21. html = reg.Replace(html, str + "</body>");
  22. writer.Write(html);
  23. }
  24. else
  25. {
  26. base.Render(writer);
  27. }
  28. }

字符串

展开查看全部

相关问题