102

我发现一些疯狂的评论说 ASP.NET MVC 比 ASP.NET WebForms 快 30 倍。那里有什么真正的性能差异,是否已经测量过,性能优势是什么。

这是为了帮助我考虑从 ASP.NET WebForms 迁移到 ASP.NET MVC。

4

14 回答 14

69

我们还没有执行得出任何结论所需的可扩展性和性能测试类型。我认为 ScottGu 可能一直在讨论潜在的性能目标。随着我们向 Beta 和 RTM 迈进,我们将在内部进行更多的性能测试。但是,我不确定我们关于发布性能测试结果的政策是什么。

无论如何,任何此类测试确实需要考虑现实世界的应用......

于 2008-09-05T16:19:02.927 回答
48

我认为这将是一个很难明确回答的问题,因为很大程度上取决于A)你如何实现 WebForms 应用程序,以及B)你如何实现 MVC 应用程序。在它们的“原始”表单中,MVC 可能比 WebForms 更快,但是多年的工具和经验已经产生了许多用于构建快速 WebForms 应用程序的技术。我敢打赌,高级 ASP.NET 开发人员可以开发出可以与任何 MVC 应用程序相媲美的 WebForms 应用程序,或者至少可以实现微不足道的差异。

正如@tvanfosson 所建议的那样,真正的区别在于可测试性和干净的 SoC。如果提高性能是您最关心的问题,我认为这不是跳槽 WebForms 并开始在 MVC 中重新构建的好理由。至少在您尝试了优化 WebForms 的可用技术之前是这样。

于 2009-02-10T03:10:07.207 回答
42

仅通过消除视图状态并使其可以以编程方式处理提交的输出,它将我的一个页面从 2MB 有效负载减少到 200k。

即使处理相同,仅大小本身也将大大提高每秒连接数和请求速度。

于 2008-09-05T16:24:16.160 回答
29

我认为许多认为 WebForms 本质上是缓慢或资源密集型的人将责任归咎于错误的地方。10 次中有 9 次在我被带入优化 Web 表单应用程序时,应用程序作者误解了视图状态的目的的地方太多了。我并不是说视图状态是完美的或任何东西,但滥用它太容易了,正是这种滥用导致了臃肿的视图状态字段。

这篇文章在帮助我理解许多这些滥用行为方面是无价的。https://weblogs.asp.net/infinitiesloop/truly-understanding-viewstate

为了在 MVC 和 WebForms 之间进行有效比较,我们需要确保两个应用程序都正确使用了架构。

于 2009-02-10T03:11:28.920 回答
14

我的测试显示 MVC 上的请求/秒增加了 2 倍到 7 倍,但这取决于您如何构建 Webforms 应用程序。上面只有“hello world”文本,没有任何服务器端控制,mvc 快了大约 30-50%。

于 2008-10-22T14:40:53.193 回答
12

对我来说,MVC 中真正的“性能”改进是增加了应用程序的可测试表面。对于 WebForms,有很多应用程序很难测试。使用 MVC,可测试的代码量基本上翻了一番。基本上所有不容易测试的是生成布局的代码。您的所有业务逻辑和数据访问逻辑——包括填充视图中使用的实际数据的逻辑——现在都可以进行测试了。虽然我希望它的性能也更好——页面生命周期被大大简化并且更适合网络编程——即使它相同或慢一点,从质量的角度来看还是值得切换的。

于 2009-02-10T02:54:11.863 回答
7

我认为这里的问题是,无论 ASP.Net MVC 比旧的 webforms 快多少,它都不会产生影响,因为大部分时间都花在了数据库中。大多数时候,您的 Web 服务器将处于 0-10% 的 CPU 使用率,只是在等待您的数据库服务器。除非您在您的网站上获得大量点击,并且您的数据库非常快,否则您可能不会注意到有很大的不同。

于 2009-02-11T15:54:04.080 回答
6

我能找到的唯一具体数字来自早期的 ASP.NET MVC 开发是在这个论坛线程上:

http://forums.asp.net/p/1231621/2224136.aspx

Rob Connery 本人在某种程度上证实了 ScottGu 声称 ASP.NET MVC 每秒可以处理 8000 个请求的说法。

也许 Jeff 和他的团队可以从他们对这个网站的开发中给出一些暗示。

于 2008-09-05T12:06:29.103 回答
3

与公认的观点相反,优化的网络表单使用在原始性能方面完全扼杀了 MVC。Webforms 已经针对提供 html 的任务进行了超优化,远远超过 MVC。

指标可在http://www.techempower.com/benchmarks/#section=data-r7&hw=i7&test=db

每个比较 mvc 都在列表的中下/下上排名,而优化的 webforms 使用情况则在中上/下排名中。

对这些指标的轶事但非常严肃的验证,www.microsoft.com由 webforms 而不是 MVC 提供服务。这里有没有人相信如果 MVC 在经验上更快,他们就不会选择它?

于 2013-11-27T21:17:13.943 回答
2

这个真的没有办法回答。MVC 本身默认使用 Web 窗体视图引擎,并且可以配置为使用任意数量的自定义视图引擎,因此如果您想要进行性能比较,您必须更加具体。

于 2008-10-21T14:02:36.827 回答
2

大约一年前我开始在 MVC 中工作,我受到了启发,但没有留下深刻的印象。

我讨厌视图状态,并将其视为 ASP.NET 的万恶之源。这就是为什么我只是不使用它,老实说,你为什么要使用它?

我基本上采用了 ASP.NET MVC 框架概念并以我自己的方式构建它。不过,我改变了几件事。我围绕动态重新编译构建了我的控制器包装代码或 URL 路由代码。

现在,我想说的是,ASP.NET MVC 应用程序会根据您的使用方式而更快。如果您完全放弃 WebForms,您会更快,因为 ASP.NET 生命周期和对象模型非常庞大。

当你写作时,你正在实例化一支军队……不用等,一大群对象将参与到你的视图的渲染中。这比在 ASPX 页面本身中表达最少量的行为要慢。(我不关心视图引擎抽象,因为 Visual Studio 中对 ASPX 页面的支持很不错,但是由于代码膨胀或无法更改,我已经完全放弃了 WebForms 作为一个概念和基本上任何 ASP.NET 框架连接我的应用程序的东西)。

我找到了依靠动态重新编译(System.Reflection.Emit)在需要时发出特殊用途对象和代码的方法。此代码的执行速度比反射快,但最初是通过反射服务构建的。这给了我的 MVC 风格的框架很好的性能,但也非常静态类型。我不使用字符串和名称/值对集合。相反,我的自定义编译器服务将表单帖子重写为传递引用类型的控制器操作。在幕后发生了很多事情,但这段代码很快,比 WebForms 或 MVC 框架快得多。

另外,我不编写 URL,我编写 lambda 表达式,这些表达式会被转换为 URL,这些 URL 稍后会告诉要调用哪个控制器操作。这不是特别快,但它胜过有损坏的 URL。就像您拥有静态类型的资源和静态类型的对象一样。静态类型的 Web 应用程序?这就是我想要的!

我会鼓励更多的人尝试这个。

于 2009-02-11T09:42:58.900 回答
2

使用 Visual Studio 创建的项目。一个是mvc4模板,另一个是WebForm(繁体)。当使用 WCAT 进行负载测试时,结果是这样的,

MVC4 比 WebForms 慢很多,有什么想法吗?

在此处输入图像描述

MVC4

  • 可以获得大约 11 rps
  • 2-cpu 或 4-cpu 服务器的 rps 都非常低

在此处输入图像描述

网络表单 (aspx)

  • 可以超过2500 rps

  • 已发现性能杀手是 MVC Bata 或 RC 的错误。一旦我删除了 Bundles 的东西,性能就会得到改善。现在最新版本解决了这个问题。

于 2012-10-15T03:51:46.877 回答
1

性能取决于你在做什么......通常 MVC 比 asp.net 更快,主要是因为 Viewstate 不存在,并且默认情况下 MVC 更多地使用回调而不是 Postback。

如果您优化您的 web 表单页面,您可以获得与 MVC 相同的性能,但这将是很多工作。

此外,它们为 MVC(以及 Webform)提供了很多 nugets 来帮助您提高网站性能,例如组合和缩小您的 css 和 javascripts、对您的图像进行分组并将它们用作 sprite 等等。

网站的性能很大程度上取决于您的架构。具有良好关注点分离的干净代码将为您带来更干净的代码,并更好地了解如何提高性能。

您可以查看此模板“ Neos-SDI MVC 模板”,它将为您创建一个干净的架构,默认情况下具有很多性能改进(查看MvcTemplate网站)。

于 2013-03-14T16:38:18.370 回答
-1

在此处输入图像描述

我用一些基本代码做了一个小型 VSTS 负载测试实验,发现 ASP.NET MVC 响应时间比 ASP.NET Webforms 快两倍。上面是带有情节的附图。

您可以从这篇 CP 文章https://www.codeproject.com/Articles/864950/ASP-NET-MVC-vs-ASP-NET-WebForm-performance-compari详细阅读此负载测试实验

使用 VSTS 和 Telerik 负载测试软件按照以下规格进行测试:-

用户加载 25 个用户。

测试的运行持续时间为 10 分钟。

机器配置 DELL 8 GB Ram,Core i3

项目托管在 IIS 8 中。

项目是使用 MVC 5 创建的。

假设网络 LAN 连接。所以这个测试暂时不考虑网络延迟。

测试中的浏览器选择了 Chrome 和 Internet Explorer。

在测试期间进行多次读数以平均未知事件。7 个读数,所有读数在本文中发布为读数 1 、 2 等。

于 2015-01-13T15:52:28.337 回答