web-dev-qa-db-ja.com

PHPとASP.NET Webフォームのページサイズの違いは何ですか?

中小企業向けのWebアプリケーションをプログラムする予定です。 ASP.NET Webフォームについて読んだとき、動的なサイトを構築する方法が気に入りました。

ただし、友人から、WebフォームによってViewState出力が原因でページのサイズが大きくなる可能性があると聞いたことがあります。 PHP=ページのサイズとASP.NETページの生成されたHTMLのサイズの違いは劇的ですか?

6
Zainy

ASP.NET Webフォームを使用する場合、HTMLを拡大するいくつかの側面があります。これらはある程度緩和でき、一部は他よりも簡単であり、特に.NET 4.0では改善が行われています。

  • あなたが言うように、隠された__VIEWSTATE要素があり、WebFormsはステートフルネスの幻想を維持するために使用します。これはデフォルトでオンになっており、触れない場合は、多くのコントロールがあるページに不要な重みを簡単に追加できます。ただし、実際に使用していない場合は、EnableViewState="False"を使用して、ページまたはコントロールでオフにすることができます。
  • より機能的なWebフォームコントロールを使用すると、かなり迅速な開発を行うことができますが、実際には自分の管理下にない多くの生成されたHTMLを生成することもでき、サブセットに必要なサイズよりもはるかに大きくなる可能性があります。必要な機能の。私のWebフォーム時代、多くの開発者(私も含む)は、最初は時間を節約できたように感じていたが、後になってより多くの時間を費やすことになったため、より強力なコントロールを回避しました。必要な正確な結果を得ることができます。
  • マスターページ、ページ、およびさまざまなユーザーコントロールを使用して、保守しやすい方法でページを設計すると、WebフォームのIDの名前の管理(一意性を保証するため)により、かなり長いIDが生成されることがわかります。 id="ctl00_AGSMasthead_imgSkipContent"のようなHTML要素。これは.NET 4.0で改善されました。新しいClientIDMode="Static"プロパティを使用して、IDを変更する必要がないことをWebフォームに通知できます。独自性を維持できます。
  • Webフォームは、コントロールのIDを使用して、サーバー側のコードでそのコントロールを参照するandをレンダリングされたHTMLの要素のIDとして使用するため、多くの場合、多くのHTML要素がCSSやJavaScriptによってクライアントサイドで使用されることはなく、無駄なスペースであるID。ちなみに、これは私のWebフォームの主な嫌いな点の1つです。あなたは<asp:Label Id="lblName" Runat="Server"/>のようなことをするので、コードビハインドにラベルを埋め込むことができ、それは<span id="lblName">として提供されます-あるいは、昔は、おそらく<span id="ctl00_ucHeader_lblName">のようなものです。不要なので、個人的にはRunat="Server"属性の代わりに、ServerID="lblName"の行に沿って何かを設計して、コントロールがサーバー側であると識別したことを願っていますandクライアント側ID(存在する場合)とは別のサーバー側ID。

結局のところ、ある程度はこれで回避できますが、Webフォームを使用するように設計された方法で使用すると、will提供するHTMLに重みが追加されます。厳密には必要ありません。

ただし、Webフォームページと他のプラットフォームやフレームワークによって生成されたページとの重みの違いは、コード化が不十分なページと、コード化されたページとの違いよりも小さいと思います。不要なタグや属性、クリーンで邪魔にならないJavaScriptなどを使用します。

5
Carson63000

あなたが示したようにASP.NETはViewStateを使用します。まず、ViewStateの目的とその理由を簡単に説明します。

ViewStateとは

簡単に言うと、ViewStateの目的は、ポストバック間でフォームフィールドの値を保持することです。そのステートメントから、フィールドが多いほど、ViewStateが大きくなると推測できます。

ポストバック間でフォームフィールドの値を保持することに加えて、ViewState[key] = valueを使用して、ViewState内に任意のデータを保存することもできます。

ただし、使用するのが適切でないページレベルまたは要素レベルでViewStateを無効にすることができます。これにより、ViewStateのスペースも節約できます。

どうやって

ViewStateは非表示のフォーム要素として保存され、ページを送信するとサーバーに送信されます。次の図は、ViewState処理の要点を示しています。

asp.net viewstate
(ソース: Microsoft.com

ここで重要なのは、LoadViewStateSaveViewStateです。 LoadViewStateは、サーバーにポストされたデータをロードします。ここで、SaveViewStateは、ページイベントが処理された後、ViewStateに格納するためにシリアル化します。

メリット

ViewStateを使用する主な利点は、ページのロード間でデータを保持することです。たとえば、ページが最初に読み込まれると、長時間実行されているデータベースクエリなどの結果がフィールドに入力されます。以降のロードでは、ViewStateの値を使用して、そのクエリの再実行を保存できます。

ASP.NET MVCとの関係

ViewStateはASP.NET MVCにはまったく関係がなく、ASP.NET Webフォームのコンポーネントです。

PHPで同等ですか?

PHPには同等のものはありません。たとえば、モデルをシリアル化してPOSTで再ロードすることで、必要に応じて機能を手動で実装できます。

ViewStateを使用する必要がありますか

いいえ、必要ありません。オフにすると、ページの出力サイズは減少しますが、データの再読み込みのオーバーヘッドも考慮する必要があります。

TL; DRと質問

PHPページとASP.NETページの生成されたHTMLのサイズの違いは劇的ですか?。答えはそれは出力するものに依存します。大量のフォームを作成している場合、特にAsp:DataTableなどのコントロールを使用している場合は、はい、出力が大幅に大きくなる可能性があります。表示されたViewStateは1 MBを超えます。送信するたびに、ViewState全体をWebサーバーにアップロードする必要があることを覚えておく必要があります。小さくてシンプルなフォームを作成している場合、サイズの違いは無視できます。YMMVまさにあなたが何をしているのかによります。

もう1つ覚えておくべきことは、PHPでは、生成されたマークアップをWebFormsで行うよりもはるかに制御しやすいことです。

2
Sam