2011-01-30 9 views
4

ページが5つあります。 各セクションのレンダリングに約1秒かかります。AJAXまたはマルチスレッドを使用してページの読み込み速度を向上させる

Page_Load() 
{ 
    RenderSection1(); //1 sec 
    RenderSection2(); //1 sec 
    RenderSection3(); //1 sec 
    RenderSection4(); //1 sec     
    RenderSection5(); //1 sec 
} 

このページの読み込みを高速化したいと思います。しかし同時に、Webアプリケーションの他の部分のパフォーマンスが低下せず、IISもクラッシュしないことを確認してください。

ザ・はいくつかのアプローチです:

  1. は、AJAX要求を使用してください。コントローラまたはWebサービスへのMVCスタイルのリクエストが必要です。
    各セクションの周りのUpdatePanelを使用すると、動作しません - 私はここでのアプローチを使用して同時に複数のUpdatePanelsにリフレッシュを提出しようとするので: http://encosia.com/2007/07/13/easily-refresh-an-updatepanel-using-javascript/、 最後の要求は常に勝つ: http://www.codeproject.com/Tips/57035/Simultanious-Async-Requests-Using-Multiple-Update-.aspx

  2. 使用ASPを。 NETスレッドは、 right way to create thread in ASP.NET web applicationに回答しています。

  3. は別のDLLまたは外部のWebサービスでアプリケーション・サービス・クラスに、通常は、DBリクエストを時間を取るのロジックを移動... RenderSection1、RenderSection2など:だから私は、コールごとに個別のスレッドを使用します。

OrderDTO GetDataForViewOrder(int orderID) 
{ 
} 

、そのDLLで複数のスレッドを使用するような何か。このアプローチは、スケーラビリティが最も優れているようですが、UIの詳細をアプリケーションサービスレイヤに導入します。

どのアプローチがベストだと思いますか、なぜですか?

答えて

2

スレッドは単一ページの読み込みに役立ちますが(サーバーに少なくとも5つのCPUコアがある場合)、スケーラブルなアプローチではありません。 3人のユーザーが同時にアプリにヒットした場合はどうなりますか?パフォーマンスを向上させるには、サーバーに15コアが必要です。

AJAXは解決策になる可能性がありますが、AJAXリクエストごとに独自のスレッドが生成されるため、同じスケーラビリティの問題が発生します。明るい側では、AJAXは、ページの遅い部分が同じ時間を取っても、何かが読み込まれているのを見ることができるので、エンドユーザーにとって予期されたスピードの向上をもたらします。

パフォーマンスヒットがデータベースから発生するかどうかを実際に調べる必要があるのは、非同期DBクエリです。ページの5つの部分に対して5つの非同期呼び出しを開始し、潜在的に最大5回の読み込み時間を短縮することができます。しかし、コードは複雑になります。また、これをAJAXの手法と組み合わせる場合は、非同期ASPを調べる必要があります。NETページまたは非同期WCFサービスを使用すると、すべてのユーザーが5つのスレッドを使用するため、多くのユーザーがいる場合のスケーラビリティの問題を回避できます。

非同期呼び出しのためのコードは、おおよそ次のようになります。


Page_Load() 
{ 
    BeginDBRequest1(); 
    BeginDBRequest2(); 
    BeginDBRequest3(); 
    BeginDBRequest4(); 
    BeginDBRequest5(); 
    data1 = EndDBRequest1(); 
    data2 = EndDBRequest2(); 
    data3 = EndDBRequest3(); 
    data4 = EndDBRequest4(); 
    data5 = EndDBRequest5(); 

    //all of the above calls take the time of the max time call and not the sum of the times 

    RenderSection1(data1); //1 sec 
    RenderSection2(data2); //1 sec 
    RenderSection3(data3); //1 sec 
    RenderSection4(data4); //1 sec 
    RenderSection5(data5); //1 sec 
} 
+0

はい、各RenderSectionには、大部分の時間がかかるDBに対する1つの大きなクエリがあります。私はAsync Sql Queriesをチェックアウトしましたが、ADO.NETのように見えますが、非同期実行を達成するため、他のソリューションと同じ問題が発生する可能性があります。 –

+0

あなたのような重大なケースで実行していないため、私はそれをテストしていません。このメソッドは、AJAXを必要とせずに読み込み時間を短縮できますが、ADO.NETの実装について正しいと仮定して、AJAXメソッドと同様にスレッドを消費します。一方、ASP.NETの非同期ページは、使用されているスレッド数の問題を解決するために特別に設計されているため、非同期ページを調べる必要があるかもしれません。 AJAXシナリオ – Stilgar

+0

ADO.NETの非同期クエリを紹介していただき、ありがとうございます。それらを使用することの1つの利点は、IOスレッドと通常のワーカースレッドを使用することです。 IOスレッドは軽量でIISの制限はワーカースレッドの方がはるかに高いです。だから私はこれが行く方法だと思う。 –

2

ajax。

すべてのスレッドが完了するまでページ全体が待機する必要があるため、スレッド化はあまり役に立ちません。そして、時間がかかるのはASP.NETそのものではないだろう。それはあなたのデータベースか他のものである可能性が高いです。スレッドは、アプリケーションをあまり習得することなく、アプリケーションをより複雑にします。 Webアプリケーションのスレッドのみを使用してメンテナンスタスクなどを実行するだけで、ASP.Netを使用して他のすべてを解決できます。

ajaxを使用すると、メインページをすばやく返し、すべてのセクションがajaxリクエストの結果を返すとすぐにレンダリングされます。

1

一つのオプションは、非同期ページ・ロードを使用することができます。しかし、これはすべてサーバー側の処理です。基本的には、非同期に実行するタスクを登録しており、完了するためにを待つです。したがって、送信されるhttp要求は、すべてのタスクが完了するまで待機します。

第2のオプションはajaxです。ここでの利点は、ページの読み込みがすばやくできることです。しかし、実際には更新パネルでは機能しません。 asp.net ajaxではなく、古典的なajaxの概念に移行してください。 jQueryのようなライブラリを使うことは、大いに役立ちます。一度ページが読み込まれると、5つのセクションすべてにajax呼び出しを行うことができます。これらの5つのセクションのコンテンツを返すためのコードを記述する必要があります。

もちろん、URLがmvcスタイルの場合、理想的にはajaxリクエストが意味を持ちます。しかし、私の意見では、asp.netハンドラは非常に小さな方法で、これらのMVCスタイルの要求に近づく。

関連する問題