能否将ASP.NET WebForms优化到与ASP.NET MVC一样快的性能?

9

最近ASP.NET MVC备受瞩目,但事实是ASP.NET WebForms在一段时间内仍然不会消失。对于现有的开发人员,有没有办法优化ASP.NET WebForms,使其像ASP.NET MVC一样快速?

我注意到ASP.NET MVC和ASP.NET WebForms之间的速度差异很大。MVC比WebForms更快,加载页面更快。如果我优化ASP.NET WebForms,能否达到同样的效果?如果可以,你会推荐什么方法?


1
需要引用吗?“相当可感知”并不是优化的强烈指示。 - John Farrell
6个回答

8
在您的页面指令中执行以下操作:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs"
    Inherits="TestApp._Default" EnableViewState="false" %>

主要关闭ViewState将占据页面性能差异的大部分。此外,限制使用WebForm控件也会使您提供的HTML更少冗长,因为它们往往会产生非常冗长的HTML。
另一方面,这样做几乎就像削减了WebForms的一些重要优势。控件和使用ViewState抽象状态是WebForms如今如此流行的主要原因之一。
我仍然进行大量的WebForms开发,并且也进行MVC开发。了解两者及其优点将有助于您在任何框架中创建出高性能的应用程序。当我创建任何新的WebForms应用程序时,我首先要做的就是将页面包装在一个Panel中,并确保禁用整个面板的ViewState。随着我的开发,如果我发现需要使用ViewState(例如,为了节省时间或简化事情),我会逐案打开它,以便我理解为什么要使用它,并做出有意识的决定来增加我的页面开销。
如果您考虑性能,WebForms可以像MVC一样快,但是如果您只想忽略性能并快速完成应用程序,则很容易使其变得更慢。

8

技术并不重要,重要的是你如何实现你的应用程序。有人可能会争论ViewState会有所不同,但那也是一个实现细节。ViewState不是必需的,你也可以将其留在服务器上。最终,这两种技术都通过HTTP传递HTML。


3
每个框架都会引入一些管道开销(例如,MVC必须解析路由,而WebForms必须连接/监听事件、解析控件等)。真正的问题是,这两个框架的开销是否有可衡量的差异?如果有差异,则无论用户如何调整设置,也无法使一个框架与另一个框架一样快。 - Justin Niessner

5

其中一个原因是ViewState,还有其他一些作为<ASP:TextBox>的一部分呈现的膨胀代码。你应该关注页面负荷。

其他条件相同,这是我所知道的主要性能差异。


4
不必使用ViewState或ASP.NET控件,这是实现细节。 - rick schott
2
是的,但大多数人都这样做,这就是为什么MVC似乎更快的原因,因为它甚至不是一个选项。 - Nate
1
@rick - 如果你没有使用ASP.NET控件或ViewState,那么你就不是在使用WebForms。OP并没有询问MVC与最少量的ASP.NET工作之间的区别。 - Richard Szalay

3

我注意到速度上有明显的差异。

也许你应该先以可定义的方式正确地衡量性能。然后,如果确实存在差异,那么就会更清楚这种差异来自哪里,以及如何弥合这种性能差异。


3

有一件事情会导致ASP.NET变慢,其他人也提到过:视图状态(Viewstate)。这对ajax调用尤其如此。使用UpdatePanels时会发布完整的Viewstate。

话虽如此,有一件事情会让你的ASP.NET网站比ASP.NET MVC网站表现更好:缓存。ASP.NET允许甜甜圈缓存:您可以按WebControll基础定义缓存规则。在ASP.NET MVC中无法执行此操作。

如果您真的认为速度有问题,请尝试找到瓶颈。可能是数据库调用(使用sql-profiler进行检查),可能与html相关(使用yslow),或者可能是应用程序相关(尝试像redgate的分析器之类的工具)。


在MVC中,您可以在部分视图级别进行缓存,并且没有任何阻止您在框架的其他级别编写自己的缓存。+1提到数据库调用是性能瓶颈。 - Ryan
我不明白你如何在部分级别上进行缓存。请查看http://haacked.com/archive/2008/11/05/donut-caching-in-asp.net-mvc.aspx但是当然,你可以(而且应该)缓存对数据库的调用。 - Mathias F

1

这是两种不同解决问题方法的两种不同工具之间进行比较的情况吗?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接