サイトのパフォーマンスが悪いからではなく、一般的な演習として、サイトのパフォーマンスを改善したいと考えています。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
App_Browsers
ステップ 2.プロジェクトにフォルダーを追加します。
ステップ 3. 新しいApp_Browsers
フォルダーに、default.browser
次のような新しいファイルを追加します。
<browsers>
<browser refID="Default">
<controlAdapters>
<adapter controlType="System.Web.UI.Page" adapterType="[YourNamespaceGoesHere].SessionPageStateAdapter" />
</controlAdapters>
</browser>
</browsers>
ここでページを実行すると、viewstate のサイズが数バイトに減っていることがわかります。SessionPageStateAdapter クラスは、viewstate がブラウザーに提供される前にインターセプトし、セッション状態でサーバーに保持します。クライアントに送信されるビューステートのビットは、ページがサーバーに戻されるときに元のビューステートを再構成するために使用される単なる識別子です。
サイトを最適化する前の簡単なメモとして、すべてのファイルが送信前に gzip されていることを確認して、サーバーを最適化しましたか。
そうでない場合は、ページをいじり始める前に、これでうまくいきます。
はい、ページはページ フローの発信元です。したがって、ページのビューステートを無効にすると、ビューステートのレンダリングが OnInit プロセスから除外されます。より良い質問は、マスター ページのビューステートを無効にすると同じことが起こるのはなぜですか?