6

주 ASP.NET 페이지에서 jQuery ajax를 사용하여 동적 aspx 페이지를로드하는 ASP.NET MVC3 프로젝트가 있습니다. 그래서 기본적으로 사이트가로드되면/Home/Index를 조회 한 다음 Index (aspx)보기에서 jQuery를 여러 줄에 걸쳐/Home/PartOne 및/Home/PartTwo로 호출하여 페이지의 일부분을 채 웁니다.AJAX 요청 대기 시간/대기 시간을 줄이거 나 제거하는 방법

그래서 페이지가로드, 그것은 기본적으로 3 개 요청을 수행 할 때마다 : PartTwo에게 다음 PartOne를 얻기 위해, 인덱스를 얻고,하기

질문을 :. "대기"시간의 어떤 종류가 거기에 왜 세 번째 요청을 실행하려면?이 브라우저 동시 요청 제한을 생각했지만 첫 번째 요청이 완료된 후 왜 실행되지 않습니다?

실험적으로 "OutputCache"attrib "PartTwo"에서 ute는 예상대로 작동하여 빠르게 실행됩니다. 이 문제는 IIS에서 문제가 아니라 어딘가에 있고 내 조치 방법에 들어가기 전에 발생한다는 것을 암시합니다. 여기

크롬 네트워크 프로파일에서 스크린 샷 : 여기 Chrome network profiler

가 MvcMiniProfiler에 스크린 샷 - 3 행/값을보고, 내 컨트롤러의 액션 코드를 실행하기 전에 500ms로 기다리고 있습니다. 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(); 
    } 
} 

내 자바 스크립트 :

$(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 :

(더 긴 계산, 아니 DB 호출 등) 나는 실제 코드를 냈다 없지만, 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) 웹에서 debug = "false"를 사용하여 빌드를 릴리스하십시오.config (어딘가에 디버그가 true 일 때 캐시 된 일부 항목이 있음) b) IIS 또는 IIS Express에서 코드를 시험해보십시오. 일반적으로 고전적인 dev 서버는 다소 편찮은 것으로 여겨집니다. – 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

또 하나의 페이스 팜 마이크로 소프트 순간 –

관련 문제