2012-05-18 96 views
1

我看到.Net中的web开发世界现在分为Asp.Net Webforms和MVC,并且有第三类更喜欢在同一个应用程序中使用这两个类。Asp.Net应用程序性能

我的问题:ViewState经常被视为邪恶,在大多数应用程序中是主要的性能瓶颈。但如果我们正确使用它,那么我根本看不出任何问题。 Asp.Net MVC 3.0/4.0 beta有太多的嗡嗡声,它没有ViewState。

但是我关心的是,如何才能Asp.Net MVC帮助加速性能,因为在我看来,我们绑定控件

if (!IsPostback) {} 
其中Asp.Net MVC我们绑定每次每个控制和

和可能会在每次发布表单时发出数据库请求。 Asp.Net Winforms不是有优势吗?是否可以保证Asp.Net MVC在所有情况下都会表现更好?

编辑:我不希望启动任何争议,并进一步我只是谈论的Asp.Net代码不是微小的Javascript,CSS缩小和所有其他招数后的表现。

+3

也许你想看到这个:http://stackoverflow.com/questions/43743/asp-net-mvc-performance – Falaque

+0

你是要求绝对保证,所以我会觉得安全的说:“不,没有保证。”对这个答案感觉很舒服。有太多的因素需要考虑,但以我的经验来看,对于相同的页面,它通常具有更轻,更快的感觉。不要忘记,在网络上传输ViewState以获得非本地主机连接的性能,浏览器必须处理DOM中的内容等。并非所有性能项目都在ASP.NET管道中。 –

+1

否。网络应用程序性能有很多因素。你可以编写可怕的MVC代码,可能不如WebForms中的那么容易,但它仍然是可能的。更重要的是,对Web应用程序管道和性能瓶颈(对任何框架不知道)有很好的理解。 – jrummell

回答

1

在这里所有优秀的答案,但我要扔我的2美分。

当您使用if (!IsPostBack)绑定控件时,您正在向webforms页面写入加密的viewstate字段。在下一次请求期间,所有状态都会发送到您的服务器并进行解密/反序列化。如果你在页面上有一个GridView,它的所有行都将处于视图状态,所以你不需要再次创建另一个数据库请求来重新绑定它。

从这个意义上说,它可能使您的服务器上的性能更好。但是,正如其他人所说的那样,您将所有视图状态发送到服务器的网络命中。此外,您需要将状态推回。这听起来像是为了克服潜在的视图滥用问题并保持webforms性能更好而保持视图状态。这绝对是一种好的做法,因为视图状态经常被滥用,甚至被忽略。

考虑将分页的GridView推送到客户端的示例。如果您的GV包含15行,您可能会将性能全部推向客户端,在备份过程中对其进行反序列化,并且在第一次加载后不会触及db。当您的GV包含1500行时,如果您没有在视图状态下发送它,最终用户可能会看到更好的性能,并且在每个分页请求期间击中分贝。 (但是,只要他们从GV链接到详细信息页面,然后点击“返回”按钮,他们将被要求重新发布他们的数据 - 无论有多少行,这总是令人讨厌。

最终,当您在提供和使用webforms页面的计算机上开发时,性能可能会更好。但取决于视图状态的大小,通过网络访问内容的用户可能无法像您那样看到速度。 It all depends on how fat your viewstate is

我觉得很多MVC粉丝喜欢它的原因之一是因为他们only need to send the minimal request to the server that is needed to perform a specific action。我们可以拆分我们的表单,只将部分或块发送到不同的操作,而不是反序列化整个表单,而不是将1个单一表单提交给页面上的所有Web控件。

正如其他人在这里所说,你的问题的简短答案是NO,MVC不会总是比webforms更快或性能更好。没有黑色和白色。在许多情况下,它可以并且确实如其他人所说的那样,some apps are better suited for webforms。另外,性能是你唯一关心的问题?即使性能可能总是“取决于”,MVC在其他领域的网络表单上仍然具有黑色优势。

+0

我最喜欢你的答案。但是我不推送1500行到客户端:)。在最大我服务器50行,最多7列:)。顺便说一句,它没有加密它的编码(Base64)。 – Jack

+0

这很好,但你在原来的问题中没有提到。我只是想解释为什么在webforms上有关于MVC的“嗡嗡声”,以及它在某些情况下如何更好地执行。 – danludwig

+0

我有关于MVC的其他安全问题。可能我会在其他问题中发布它。不是今天,我每天6次的配额已经结束了:)。 – Jack

0

我个人认为MVC更适合需要显示较轻内容的网站。但是如果你需要为日间交易者建立网格,那么Web窗体就占了上风。

ASP.net MVC不以asp.net web表单的方式绑定控件。

您需要使用JQuery才能做到这一点。 Jquery有出色的表现。

http://www.codeproject.com/Articles/305308/MVC-Techniques-with-JQuery-JSON-Knockout-and-Cshar

它还必须提到MVC \ jQuery的需要的专业知识高得多的水平。所以当涉及到成本时,你必须注意底线。成本通常被程序员忽略,但它在任何项目中都扮演着重要的角色。

2

我不能说MVC的优势是性能,但我认为它可能更快。它的优势不在于处理类似winforms的控件生命周期。开发并不会变得越复杂,单个页面上的内容就越多,如果控制不当,那么生命周期事件可能会互相影响。

关于性能,MVC的生命周期是静态的。有一些事件发生,但这并没有太大的改变。性能问题在您的操作方法中。使用webforms,每次回发都会发生多个事件和控件重新创建,即使这些控件未被使用或可见也是如此。 webforms中存在更多的浪费,这使得MVC相对精益而言更加开放,可以获得更好的性能。

2

mvc(无论是MS还是任何其他框架)更贴近web的无状态本质和概念。

webforms旨在使Web开发更像一个有状态的桌面客户端。这就是页面事件,回发和视图状态存在的原因。

我看过视图状态是50MB。这绝对会伤害表演。使用mvc框架,您可以快速缩小页面大小。然而,mvc的优势在于它简单(vs webforms页面生命周期)和2.它的可扩展性。

如果您不喜欢控制器工厂,验证或视图引擎的默认实现,则可以在mvc中将其交换出来。与webforms你不能。