그래서 나는이 액션을 int 파라미터를 받고 그것에 종속 된 json을 반환하는 asp.net mvc 컨트롤러에 가지고있다. 해당 작업이동시에 동일한 ASP.NET 액션에 복수의 아약스 요청
Public JsonResult GetSomeData(int intParam)
{
var someData = _someService.GetSomeDataByIntParam(intParam);
return Json(someData);
}
을 보는 방법이 그래서 여기에 특별한 아무것도, 필요한 모든 작업이 SomeService
의 인스턴스에 의해 수행이없는 한 다음 작업 그냥 JSON을 반환합니다. 이 부분 _someService.GetSomeDataByIntParam(intParam);
의 평균 소요 시간은 35-80 밀리 초입니다. 프론트 엔드에서 Ajax가이 액션을 호출하는 Jquery 코드가 있고 대답을 얻으면 json의 데이터가 DOM의 어딘가에 저장된다. 이 (일부 razor
포함) jQuery 코드
@foreach (var intParam in Model.IntParams)
{
<script type="text/javascript">
$.ajax({
type: 'POST',
url: '/SomeController/GetSomeData',
data { intParam: @intParam },
success : function (response) {
var responseParam = response.param;
if (response.anotherParam)
responseParam += '<span class="some-class">!</span>';
var someForm1 = $('#[email protected]');
someForm1.children('span.some-another-class').html(responseParam);
var someForm2 = $('#[email protected]');
someForm2.children('span.some-another-class').html(responseParam);
}
});
</script>
}
은 3-10 요소
IntParams
을 int로 평균이있을 것입니다. js는 페이지가 렌더링 된 직후에 실행됩니다. 그래서 전체 시나리오는 이와 같습니다. 페이지가 그려지면 json 데이터가 쿼리되고 js로 전달되면 DOM의 어딘가에 삽입됩니다. json을 되 돌리는 액션은 하나를 실행하는 동안 다른 요청을 대기 중입니다. 그래서 그 5 개의 ajax 호출이 한 번에 하나씩 실행되는 액션으로 호출된다고 가정하십시오. (세션 상태를 끄지 않고 비동기로 만들 수 있습니까?) 첫 번째 요청은 30-80 밀리 초의 응답을 얻고 다섯 번째 요청은 2-2.2 초 안에 응답을 얻습니다. 이것은 응용 프로그램에서 매우 중요한 부분이므로 밀리 초를 잃고 싶지는 않습니다. 나는 행동이 평균 30-80 밀리 초가 걸리면 5 번째 사람이 2 초 안에 대답을 얻는 이유를 이해하지 못한다. 400 (5 * 80) 밀리 초와 같은 것이 아니어야합니까? 또는이 통화 대기열 작업이 너무 오래 걸리는 것입니까? 최적화를하기 위해 할 수있는 일. 나는 10 초 이상의 호출이 있었으면 5 초 정도 걸릴 것입니다. 어쨌든이 모든 일을 빠르게하기 위해 할 수있는 일은 어떨까요. 어떤 제안이라도 인정 될 것입니다. (js 코드에서도)
예 내 모델에는 int 콜렉션이 하나 있지만 뷰는 사실 내 모델에서 다른 것을 필요로하지 않는 부분 뷰입니다. 이 부분 뷰는 다른 뷰에 주입되고 다른 뷰는 레이아웃에 주입되어 다른 뷰에는 특정 모델이 있습니다. – Dimitri
그런 다음 필요한 모든 특성을 가진 뷰에 대한 특정 뷰 모델을 만듭니다. 나는 현재의 접근 방식이 미래에 많은 문제를 분명히 열 것이라고 믿습니다. 또한 루프에서 연속적으로 아약스 요청을 보내는 것은 나쁜 습관이며 궁극적으로 애플리케이션의 성능을 가져옵니다. 데이터로 작업 할 때만 차이를 느낄 수 있습니다. – kbvishnu
루프에서 아약스 호출을해야합니다. 호출 수가 어떻게 될지 모르겠습니다. 그래서 루프에서 처리 할 수있는 이유는 무엇입니까? 뷰에 필요한 모든 매개 변수가 이미 모델에 있습니다. 그 컬렉션을 제외하고는 다른 것들을 넣을 생각이 없습니다. – Dimitri