2011-08-11 7 views
0

2つのドロップダウンリスト(1つは10のオプション、もう1つは約600)と約5つのパネルを持つASP.Net Webフォームページがあります。ドロップダウンから選択された値に基づいて、非同期ポストバック中にデータベースを照会することによって、他のパネルが表示または非表示になります。このページをスピードアップするにはどうすればよいですか?

私のジレンマはこれです:遅い接続、特にページの読み込み中にページが十分に速くない。レンダリングされたページを見ると、初期状態であってもviewstateのサイズが大きくなります。また、ドロップダウンにデータを入れる必要がある大量のデータがあり、ビューステートサイズに寄与している可能性があります。

このページを高速化する提案はありますか?

+0

すべてのオプションをページの読み込みにロードするには、jsクライアント側でフィルタリングを行います。 –

+1

600アイテムのDropDownは親しみやすいUIではありません: - | – IrishChieftain

+0

通常、私は同意します。しかし、私はキャプティブユーザーベースを扱っています。彼らが何を望んでいるかを知っている人(コードを入力して移動したい人)と、確かではなく、ルックアップをする必要がある人もいます。 –

答えて

2

オンデマンドで2番目のドロップダウンリストのオプションを読み込むことがあります(たとえば、AutoComplete of the AJAX control toolkitなどのコントロールを使用)。

+0

私はこれを行うことができましたが、完全に入力するには両方のドロップダウンが必要です。これは一部のユーザーには有効ですが、選択する前にリストを見る必要があります。 –

0

可能であれば、DropDownListのコントロールをそれぞれのInitイベントに配置します。この方法では、そのオプションはViewStateに保存されません。それはかなりのバイトを節約することができます。

さらに、ViewStateを完全にオフにしてもらえますか?

+0

良いアイデア!私はviewstateをオフにするのが大好きです。ポストバックで選択した値をどのように保持するのですか? –

+0

ポストバック時に値を保持する必要がある場合は、ViewStateをオンにする必要がありますが、最初の提案をしても多くの帯域幅を節約できます。 – FishBasketGordo

+0

javascriptでは、非表示の入力コントロールをドロップダウンの選択値を含む値とともにフォームに追加することができます。次に、コード内でこれらの値をRequest.Form ["inputNameAttr"]から取得し、ドロップダウンの選択値を結果に設定できます。 –

0

gzipのHTMLとJSON、トラフィックの待ち時間を短縮するためにetceteras、HTMLを簡素化し、要素数とanidationを削減し、あなたはあなたのビューステートへの負荷を軽減すべき、ページのイベントの検証を無効にすることができ

2

をレンダリング(それはです最初の負荷で多くのビューステートの理由)。イベントの検証により、制約付き入力(ドロップダウン、チェックボックスリスト、ラジオボタンリスト)で使用可能なすべてのオプションがレンダリング前に登録されていることが保証されます。その情報はviewstateと一緒にシリアライズされます。

600アイテムのドロップダウンから選択する際に、別の方法を使用することもできます。たぶんドロップダウンの代わりにAJAXの自動補完テキストボックスを提供することもできますし、ユーザーが600件の項目で探しているもののN個の一致を検索して表示する検索機能を提供することもできます。

600がドロップダウンにはあまりにも多く、ユーザーの選択肢を少し動的に絞り込むことでもう少し多くを入れれば、帯域幅を大幅に増やすことができると思われます...しかし、さておき、デザイン、ページのイベントの検証を無効にした場合、あなたはすぐに巨大な減少を参照してくださいよ...

<%@ Page Title="Home Page" EnableEventValidation="false" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" ... more attribs ... /> 
0

の私の意見はあなたのパフォーマンスをEEKするためにあらゆるものを行うことができます!

1)Yahoo's performance rulesをご覧ください。これらは一般的に、ウェブサイトのスピードアップに役立つベストプラクティスのリストです。

2)Chromes Inspector(設定 - >ツール - >デベロッパーツール)または他のブラウザの対応ブラウザ(FirebugのFirebug、IE9でもツーリングがあると思います) 。彼らはあなたにファイルサイズから、要求の数とページの負荷の内訳までのすべてを表示します。

3)AJAXと必要に応じて遅延読み込みを調べます。読み込み時間はまだそこにありますが、ユーザーにとってはそれほど目立たなくなります

4)クエリのパフォーマンスをチェックして最適化できるかどうかを確認してください。

希望すると便利です。

0

リクエストがzipまたはdeflateを受け入れる場合は、応答が返されます。

var response = HttpContext.Current.Response;     

string acceptEncoding = HttpContext.Current.Request.Headers["Accept-Encoding"] ?? ""; 
if (acceptEncoding.Contains("gzip")) 
{ 
    response.Filter = 
     new System.IO.Compression.GZipStream(response.Filter, 
      System.IO.Compression.CompressionMode.Compress); 
    response.AppendHeader("Content-Encoding", "gzip"); 
} 
else if (acceptEncoding.Contains("deflate")) 
{ 
    response.Filter = 
     new System.IO.Compression.DeflateStream(response.Filter, 
      System.IO.Compression.CompressionMode.Compress); 
    response.AppendHeader("Content-Encoding", "deflate"); 
} 

ViewStateをセッションに移動します。このプロパティは、ベースページクラスでオーバーライドします。

protected override PageStatePersister PageStatePersister 
{ 
    get { return new SessionPageStatePersister(this); } 
}