6

メインのaspxページがjQuery ajaxを使用して部品の動的ローディングを行っているASP.NET MVC3プロジェクトがあります。だから、基本的にサイトが読み込まれ、/ Home/Indexをヒットし、Index(aspx)ビュー内にあるとき、ajaxを呼び出すいくつかの行がある(/ Home/PartOneと/ Home/PartTwoにページの一部を移入する。AJAXリクエストの待機時間/待ち時間を減らす/取り除く方法

ので、ページが読み込まれるたびに、基本的に3つの要求を行っている。PartOneを取得するには、インデックスを取得し、その後、PartTwo

質問:なぜのための時間を「待機」のいくつかの種類があるが3番目のリクエストを実行するには?これはブラウザの同時リクエスト制限だと思ったが、最初のリクエストが完了してから実行しないのはなぜですか?

実験的に「OutputCache」属性「PartTwo」上のuteは、期待通りに動作し、速く実行しています。これは、問題がIISではなく、その後のどこかに、そして私のアクションメソッドに当たる前に、そのことを示唆しています。ここで

はクロームネットワークプロファイラからのスクリーンショットです:ここで Chrome network profiler

がMvcMiniProfiler上のスクリーンショットである - 第三行/値を見て、それは私のコントローラのアクションコードを実行する前に、500ミリ秒を待っています。 enter image description here

コントローラコードは次のようになります。

public class HomeController : Controller { 
    public ActionResult Index() { 
     // do something here 
     return View(); 
    } 

    public ActionResult PartOne() { 
     // do something here 
     return View(); 
    } 

    public ActionResult PartTwo() { 
     // do something here 
     return View(); 
    } 
} 

私のjavascript:

$(document).ready(function() { 
    $.ajax({ 
     url: "/Home/PartOne", 
     cache: false, 
     success: function (data, textStatus, request) { 
      $("#TestContainerOne").html(data); 
     } 
    }); 

    $.ajax({ 
     url: "/Home/PartTwo", 
     cache: false, 
     success: function (data, textStatus, request) { 
      $("#TestContainerTwo").html(data); 
     } 
    }); 
}); 

マイindex.aspx:

(無長い計算、無デシベルの呼び出しなど)を、私は実際のコードを切り取らず、PartTwoのコードは非常に簡単ですが、
<h2>Home page</h2>  
<div id="TestContainerOne"></div> 
<div id="TestContainerTwo"></div> 

PartOne.ascx:

<h2>Part One</h2> 

PartTwo.ascx:

<h2>Part Two</h2> 

ヘルプ?

+0

これは、ブラウザが特定のドメインを持つことができる同時要求の数とは何かを持っているかもしれません。この質問からの答えを見てください:http://stackoverflow.com/questions/561046/how-many-concurrent-ajax-xmlhttprequest-requests-are-allowed-in-popular-browse – Dismissile

+0

私はそうは思わない。 3つの要求しかないので、理論的には、それらはバックツーバックで実行する必要があります。しかし、遅延はサーバー側で発生しています。 OutputCacheを使用した実験についての私の注釈を見てください。これは、ブラウザ/クライアントの制限に起因しないことを示唆しています。 –

+1

お試しください:a)webでdebug = "false"を使ってビルドをリリースします。私は通常、古典的なdevのサーバーは、いくつかの薄れているいくつかの時間を見つけるように、IISまたはIIS Expressでコードを試してください(私はどこかに読んでいると思う)。 – Pedro

答えて

7

Ajaxリクエストの並列処理を行うには、読み取り専用のセッション状態を使用するか、完全に無効にする必要があります。デフォルトでは、サーバーは同じクライアントからの要求に対してセッション状態をロックするため、要求は順次実行されます。

これはSessionState属性を使用して、コントローラを飾ることで行われます

[SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly)] 
public class HomeController : Controller { 
    public ActionResult Index() { 
     // do something here 
     return View(); 
    } 

    public ActionResult PartOne() { 
     // do something here 
     return View(); 
    } 

    public ActionResult PartTwo() { 
     // do something here 
     return View(); 
    } 
} 
+1

私のブログにこの問題の記事を書きました:http://setiabud.blogspot.com/2012/03/session-variable-performance.html –

+0

別の顔の手のひらマイクロソフトの瞬間 –

関連する問題