2008-09-04 72 views
100

我发现一些野蛮的言论,ASP.NET MVC比ASP.NET WebForms快30倍。有什么真正的性能差异,是否已经测量,性能有什么好处。ASP.NET MVC性能

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

+19

自从WebForms出来后,我永远不会甘心回去! MVC窃取了我的<3 - 这个网站在Beta 5上运行得非常好! – 2009-02-11 10:19:23

+2

这个问题的所有修订回滚是什么? – Nick 2009-02-24 15:47:53

+0

@Nick:OP正在回滚任何编辑,并删除解释它们的任何评论。 – GEOCHET 2009-02-24 15:50:26

回答

68

我们还没有进行必要的可扩展性和性能测试来得出任何结论。我认为ScottGu可能一直在讨论潜在的perf目标。随着我们转向Beta和RTM,我们将在内部进行更多的性能测试。然而,我不确定我们的政策是在发布性能测试结果的时候。

在任何情况下,任何这种测试真的需要考虑实际应用...

+13

现在MVC已经发布了,有没有关于释放perf结果的更新? – chris 2009-04-24 17:23:37

+6

只是投票,因为5,999代表之前是伤害了我的眼睛:( – Damien 2009-05-01 10:09:15

+2

到这个时候,你一定有一些数字。照顾更新你的答案?或者你发现讨厌的政策禁止它? – tvanfosson 2010-06-10 11:28:37

12

Rick Strahl对What's Ailing ASP.NET Web Forms中的ASP.NET MVC性能有一些想法。

+0

@Espo谢谢。一篇非常有趣的文章,尽管他没有涉及两者之间的性能差异。 – GateKiller 2009-02-10 14:48:34

6

唯一具体的数字我可以找到它是从早期的ASP.NET MVC开发是在这个论坛线程:

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

罗布·康纳利自己有点证实声明ScottGu声称,ASP。 NET MVC可以每秒处理8000个请求。

也许杰夫和他的工作人员可以从他们的网站开发提供某种暗示。

42

它从2MB的有效载荷我的一个网页下降,至20万,仅仅通过消除视图状态,使之可以忍受编程工作与提交的输出。

即使处理过程相同,单独的大小也会大大提高每秒连接数和请求速度。

2

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

14

我的测试显示MVC上的需求量在2x和7倍之间,但它取决于您如何构建Webforms应用程序。只要有“hello world”文字,无需任何服务器端控制,mvc的速度就会快30-50%左右。

12

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

46

我认为这将是一个很难回答确切回答,因为有太多依赖于A)你如何实现的WebForms应用程序,和B)您如何实现MVC应用程序。在他们的“原始”形式中,MVC可能比WebForms更快,但是多年的工具和经验已经产生了构建快速WebForms应用程序的许多技术。我愿意打赌,一个高级ASP。.NET开发人员可以生成一个可以与任何MVC应用程序的速度相媲美的WebForms应用程序,或者至少可以实现微不足道的差异。

真正difference- as @tvanfosson suggested - 是可测试性和清洁的SoC。如果提高性能是您最关心的问题,那么我认为这不是一个很好的理由在WebForms上发布并开始在MVC中重新构建。至少在尝试使用可用于优化WebForms的技术之前。

29

我认为很多谁认为的WebForms本质上是缓慢或资源密集型是放置怪错了地方的人。当我被引入优化webforms应用程序时,有10次是9次,但是应用程序作者误解视图状态的目的太多了。我并不是说视图状态是完美的或任何其他的,但是滥用它就太容易了,正是这种滥用导致了臃肿的视图状态领域。

本文无法帮助我理解这些滥用行为。 http://weblogs.asp.net/infinitiesloop/archive/2006/08/03/truly-understanding-viewstate.aspx

为了使MVC和我们需要确保这两个应用程序是否正确使用结构的WebForms之间的有效比较。

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框架快得多。

另外,我不写网址,我写的是那些获得翻译成网址,后来知道调用哪个控制器动作lambda表达式。这不是特别快,但它击败了破损的URL。这就好像您拥有静态类型的资源以及静态类型的对象。静态类型的Web应用程序?这就是我想要的!

我会鼓励更多的人来尝试一下。

7

我觉得这里的问题是不管ASP速度多快。网络MVC比旧的webforms,它不会有所作为,因为大部分时间都在数据库中。大多数情况下,您的Web服务器将占用0-10%的CPU使用量,仅等待数据库服务器。除非你的网站上有大量的点击,并且你的数据库速度非常快,否则你可能不会注意到很大的不同。

2

与Visual Studio中创建的项目。一个是mvc4模板,另一个是WebForm(tranditional)。 而当进行负载测试与WCAT,这是结果,

MVC4是比WebForms比较慢,有什么想法?

enter image description here

MVC4

  • 可以得到约11 RPS
  • RPS是两个双CPU或4个CPU的服务器

enter image description here

的WebForms相当低( aspx)

  • 可以得到上述2500个RPS

  • 的性能杀手已经发现它的MVC巴塔或RC的错误。 一旦我删除Bundle的东西,性能会有所提高。现在最新版本解决了这个问题。

1

性能取决于你在做什么...通常MVC主要是因为视图状态不存在比asp.net更快,因为MVC默认工作多与比回调回发。

如果您优化您的网页表单页面,您可以获得与MVC相同的性能,但这将会花费大量工作量。

此外,他们是MVC(也为Webform)的许多nugets,以帮助您提高网站性能,如组合和缩小您的CSS和JavaScript,分组您的图像,并将它们用作精灵,等等。

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

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

4

与公认的观点相反,经过优化的webforms的使用完全杀死了原始性能方面的MVC。对于HTML服务的任务远远长于MVC,Webforms已经进行了高度优化。

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

每一个比较MVC是在列表中的中等偏下/下 - 上的排名,而在中等偏上/上下排名优化的web表单的使用场所。

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

-1

enter image description here

我做了一个小VSTS负载测试实验中一些基本的代码,发现ASP.NET MVC的响应时间相比,ASP.NET Web表单要快两倍。以上是附图的附图。

你可以从这个CP文章http://www.codeproject.com/Articles/864950/ASP-NET-MVC-vs-ASP-NET-WebForm-performance-compari

测试使用VSTS和Telerik的负载测试软件下面的规格进行阅读细节此负载测试实验: -

用户负荷25个用户。

运行持续时间为10分钟。

机配置DELL 8 GB内存,酷睿i3

项目托管在IIS 8

项目使用MVC 5

假设网络LAN连接创建。所以这个测试目前没有考虑到网络滞后。

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

在测试过程中对多个阅读进行平均未知事件。在这篇文章中读取7个读数和所有读数作为读数1,2等等。