我希望提高我的网站的性能,不是因为它表现不佳,而是作为一般练习。对于 asp.net 站点的通常建议是尽可能删除视图状态。我相信这可以通过页面上的每个控件单独或整个页面来完成。
我的问题是,如果我禁用页面视图状态,这将停止母版页上控件的视图状态(据我所知,母版页实际上是页面上的控件)。
我希望提高我的网站的性能,不是因为它表现不佳,而是作为一般练习。对于 asp.net 站点的通常建议是尽可能删除视图状态。我相信这可以通过页面上的每个控件单独或整个页面来完成。
我的问题是,如果我禁用页面视图状态,这将停止母版页上控件的视图状态(据我所知,母版页实际上是页面上的控件)。
有一种简单的方法可以缩小所有视图状态。
步骤 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 类在将视图状态提供给浏览器之前拦截它,并将其以会话状态保存在服务器上。仍然发送到客户端的视图状态位只是一个标识符,用于在页面回发到服务器时重构原始视图状态。
是的,页面是页面流的发起者。因此,禁用页面的视图状态会将视图状态呈现出 OnInit 进程。一个更好的问题是为什么禁用母版页的视图状态会做同样的事情?
只是在优化站点之前的一个快速说明,您是否通过确保所有文件在发送之前都经过 gzip 压缩来优化服务器。
如果不是这样,这将在您开始修改页面之前给您带来很好的提升。