ASP.NET母版页和视图状态

3

我希望提高网站的性能,不是因为它表现得很差,而是作为一种通常的练习。针对asp.net网站的常规建议是尽可能删除视图状态(ViewState)。我相信这可以通过单独为页面上的每个控件或整个页面来完成。

我的问题是,如果我禁用页面视图状态,这是否会停止主页面上控件的视图状态(据我所知,主页面实际上是页面上的一个控件)。


过早的优化是万恶之源。 - stephenbayer
您可能会发现这篇文章有帮助:http://msdn.microsoft.com/zh-cn/library/ms972976.aspx - Joel Coehoorn
那么这就是说“过早优化是万恶之源”了?:-p - Brad Wilson
3个回答

3

有一种简单的方法可以缩小所有视图状态。

步骤1. 创建一个新类,看起来像这样:

Imports System  
Imports System.Web.UI

Public Class SessionPageStateAdapter
    Inherits System.Web.UI.Adapters.PageAdapter

    Public Overrides Function GetStatePersister() As System.Web.UI.PageStatePersister

        Return New SessionPageStatePersister(Page)

    End Function
End Class

步骤2:将一个App_Browsers文件夹添加到您的项目中。

步骤3:在新的App_Browsers文件夹中,添加一个名为default.browser的文件,并使其如下所示。
<browsers>
<browser refID="Default">
<controlAdapters>
<adapter controlType="System.Web.UI.Page" adapterType="[YourNamespaceGoesHere].SessionPageStateAdapter" />
</controlAdapters>
</browser>
</browsers>

现在运行页面时,您应该发现视图状态大小已经降低到几个字节。 SessionPageStateAdapter类在视图状态被发送到浏览器之前截获它并将其保存在服务器上的会话状态中。仍然发送到客户端的视图状态只是一个标识符,用于在页面提交回服务器时重新构建原始视图状态。


1

是的,页面是页面流程的发起者。因此,禁用页面的视图状态会将视图状态呈现从OnInit过程中删除。更好的问题是为什么禁用主页面的视图状态也会做同样的事情?


1
在优化网站之前,顺便提一下服务器的优化,您是否已经确保所有文件在发送之前都进行了gzip压缩呢?
如果没有,这将为您在开始调整页面之前带来不错的提升。

http://www.codinghorror.com/blog/archives/000059.html


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