1

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

我的问题: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 缩小和所有其他技巧之后的性能。

4

4 回答 4

2

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

关于性能,MVC 的生命周期是静态的。发生了一些事件,但这并没有太大变化。性能问题存在于您的操作方法中。使用 web 表单,每次回发时都会发生多个事件和控件重新创建,通常即使控件未使用或不可见。Web 表单中的浪费要多得多,这使得 MVC 相比之下更精简,并且可以提供更好的性能。

于 2012-05-18T12:25:40.933 回答
2

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

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

我已经看到了 50MB 的视图状态。这肯定会损害性能。使用 mvc 框架,您可以相当快地减小页面大小。然而,mvc 的优点是 1. 它的简单性(与 webforms 页面生命周期相比)和 2. 它的可扩展性。

如果您不喜欢控制器工厂、验证或视图引擎的默认实现,您可以在 mvc 中将其换掉。使用您无法使用的网络表单。

于 2012-05-18T12:30:20.410 回答
1

这里有所有优秀的答案,但我也会投入 2 美分。

当您使用 绑定控件时if (!IsPostBack),您正在将加密的视图状态字段写入 Web 表单页面。在下一个请求期间,所有这些状态都被发送到您的服务器并被解密/反序列化。如果您在页面上有一个 GridView,它的所有行都将处于视图状态,因此您无需再次发出 db 请求来再次对其进行数据绑定。

从这个意义上说,它可以使您的服务器上的性能更好。但是,正如这里的其他人所说,您将所有视图状态发送到服务器会受到网络冲击。此外,您需要将状态向下推。听起来您故意保持视图状态轻,以克服潜在的视图状态滥用并使 Web 表单性能更好。这绝对是一个好习惯,因为视图状态经常被滥用甚至被忽略。

考虑将分页的 GridView 下推到客户端的示例。如果您的 GV 包含 15 行,您可能会通过将其全部推送到客户端、在返回的途中反序列化它并且在第一次加载后不访问数据库来获得更好的性能。但是,当您的 GV 包含 1500 行时,如果您不在视图状态下发送它,最终用户可能会看到更好的性能,而是在每个分页请求期间点击数据库。(但是,一旦他们从 GV 链接到详细信息页面,然后单击“返回”按钮,他们就会被要求重新发布他们的数据——这总是很烦人,不管有多少行)。

最终,当您在提供和使用 Web 表单页面的机器上进行开发时,性能可能看起来更好。但是根据您的视图状态的大小,通过网络访问内容的人可能看不到您的速度。这完全取决于您的视图状态有多胖

我认为很多 MVC 爱好者喜欢它的原因之一是因为他们只需要向服务器发送执行特定操作所需的最小请求。我们可以拆分表单并仅将部分或块发送到不同的操作,而不是反序列化整个表单,而不是使用 1 个单一的表单来提交页面上所有 Web 控件的所有数据和状态。

As others have said here, the short answer to your question is NO, MVC will not always be faster or perform better than webforms. There is no black and white. In many cases it can and does, but again as others have said, some apps are better suited for webforms. Also, is performance your only concern? MVC does have black & white advantages over webforms in other areas, even if performance may always "depend".

于 2012-05-18T16:15:59.497 回答
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 需要更高级别的专业知识。因此,在成本方面,您必须注意底线。成本通常被程序员忽略,但它在任何项目中都扮演着重要的角色。

于 2012-05-18T12:23:41.653 回答