2

ASP.NET MVC が「通常の」ASP.NET から移行する価値があるかどうかについて、いくつかの SO 記事を読みました。私が引用した MVC を使用する最大の理由の 1 つは、Viewstates を使用する必要がないことでした。

ただし、この記事に示すように、ビューステート情報をサーバーに保存することで、ビューステートを排除することができます。サンプル プロジェクトで試してみましたが、うまく機能し、気づいた限りでは完全に透過的で、実装も非常に簡単でした。

それで、キャッチはどこですか?サーバーの負荷が少し高くなると思いますが、本当にそんなに悪いのでしょうか? そうでない場合、ビューステートについて不満を言う代わりに、このアプローチを使用する人が増えないのはなぜですか?

4

4 に答える 4

2

ビューステートの唯一の問題は、それを悪用することです。デフォルトではすべてオンになっているため、これは簡単に発生します。ページでデフォルトですべてをオフにすることもできず、特定のコントロールを選択的にオンにすることもできません (4.0 でこれのサポートが追加されます)。viewstate=false を含むコードはほとんど見られず、情報のリストを使用すると、すぐに大きくなる可能性があります。

それをひどく悪用するサードパーティのコントロールさえあります. ページが非常に遅い理由を見つけるのを手伝わなければなりませんでした (機能しないなど)、ダウンロードされる情報の量が膨大であることが判明しました。その原因は、ビューステートがコンテンツのサイズの 10 倍以上だった (本当に)そしてそれはあなたがそれに渡したすべてのものを保存するのが好きなサードパーティのコントロールでした(オブジェクトの階層を渡されたので本当に醜いものになりました)。

したがって、本当の問題はビューステートではなく、そのサイズです。すでに大きなビューステートの問題 (上記の極端ではなく、通常の大きなもの) がある場合は、それをサーバー上のセッションに移動すると、膨大な量の情報が保存されることになります。これは問題をある場所から別の場所に移動させ、おそらくその影響の一部を緩和しますが、実際の問題には対処せず、不要な状態を保存しすぎます (開発者が行ったか、サードパーティの動作が不適切なため)。

とはいえ、それを通常のasp.netアプローチの唯一の主な問題とは呼べないと思います。これを「開発しないでください」と解釈しないでください。「開発する場合は、それをよく知ってください」のように考えてください。私は通常のasp.netで多くの作業を行っていますが、うまく機能します。この時点で始めるとしたら、asp.net mvc を使用すると思いますが、通常の asp.net では、開発者がそれを正しく行うには、さらに多くのことが必要になると思います。

于 2009-03-12T20:29:17.177 に答える
1

私は、ASP.NET MVC への移行はビューステートの削除がすべてであるという意見に同意しない傾向があります。ASP.NET MVC に移行するかどうかを決定する際には、ViewState を使用するかどうかはさほど重要ではありません。さらに重要なのは、モデル (問題領域を定義するタイプ) コントローラー (ユーザーがサイトと対話する方法を記述するコード) とビュー (HTML またはその他の好きなマークアップを生成するレンダリング ロジック) の間の分離です。 .

サーバーにビューステートを配置することに関しては、これがスケーラビリティのボトルネックになる可能性があります。複数の Web サーバー サイトがある場合は、それらすべてのサーバーからそのビューステートにアクセスできる必要があります。次に、そのビューステートをクリアすることを心配する必要があります。ページに埋め込まれている場合は何も考慮しませんが、サーバーに保存されている場合は、ページのビューステートをどのくらい保持する必要がありますか?

基本的に、viewstate が存在する理由は、Web 開発への「Web フォーム」アプローチをサポートするためです。このアプローチでは、ページがサーバーにポストバックされて更新されます。ほとんどの人が避けたいと思うのは、ビューステート自体ではなく、Web 開発へのこのアプローチです。ステートレス マークアップと、必要に応じて AJAX を更新することで、アプリケーションがよりクリーンになり、出力キャッシュなどをより簡単に適用できるようになります。

于 2009-03-15T21:58:33.843 に答える
0

プロジェクトが大きくなったり、プロジェクトを使用する可能性のある人が増えたりすると、パフォーマンスへのわずかな影響が非常に大きくなる可能性があります。

于 2009-03-12T20:21:11.300 に答える
0

正直なところ、ほとんどの場合、viewstate を削除することができます。私を含む多くの開発者は、必要のないすべてのコントロールを調べて無効にすることはありません。他のほとんどのコントロールはうまく機能する傾向がありますが、私が言ったように、私は必要な頻度でそれを行いません.

于 2009-03-12T20:33:22.067 に答える