性能差异 ASP.NET WebForm与ASP.NET MVC

一、为什么说 ASP.NET WebForm 比 ASP.NET MVC 要差?

  WebForm 顾名思义,微软一向主打简单化,窗体模式,拖拽控件就能做网站了,

  然而这也引发了许多 Java 和 .NET 语言好坏(性能)的争议,

  很早的时候部门老大不让用服务器控件,现在才明白是为什么。

  我们不得不考虑的问题是,既然ASP.NET Web Form 如此成功且具有优势,为什么微软还要推出ASP.NET MVC?

  主要是因为ASP.NET Webform的性能问题。在Web应用程序中从两方面来定义性能:

  1. 响应时间: 服务器响应请求的耗时

  2. 带宽消耗: 同时可传输多少数据。

  响应时间

  我们可以理解为什么ASP.NET Webform比较慢,如图我们做了一些小的加载测试。

  分别使用ASP.Net MVC和ASP.Net Webform,发现ASP.Net MVC的响应时间比Webform快了两倍。

  接下来我们在思考一个问题为什么ASP.NET MVC的性能更好?看看下面这个示例,简单的UI代码和UI的后台代码。

  通过分析我们可以得知,每一次请求都有转换逻辑,运行并转换服务器控件为HTML输出。如果我们的页面使用表格,树形控件等复杂控件,

  转换就会变得很糟糕且非常复杂。HTML输出也是非常复杂的。由于这些不必要的转换从而增加了响应时间。

  该问题的解决方案就是摆脱后台代码,写成纯HTML代码。

  带宽消耗

  ASP.NET开发人员都非常熟悉Viewstates,因为它能够自动保存post返回的状态,减少开发时间。

  但是这种开发时间的减少会带来巨大的消耗,Viewstate增加了页面的大小。

  在做的加载测试中,与MVC 对比,我们发现Viewstate增加了两倍的页面存储。

  1、HTML 消耗

  现在因为我们都是后台代码和ASP.NET web server控件的努力,我们对于怎样得到HTML以及如何使他们更有效没有更好的办法。

  如下面展示的ASPX 代码,你能确定会生成什么样的HTML代码吗?

  2、后台代码类的重用性

  如果仔细观察一些专业的ASP.NET Webform项目,你会发现后台代码类往往都包含了大量的代码,并且这些代码也是非常复杂的。

  而现在,后台代码类继承了“System.Web.UI.Page”类。但是这些类并不像普通的类一样能够到处复用和实例化。

  换句话来讲,在Weform类中永远都不可能执行以下代码中的操作: