多个ajax请求同时对同一个ASP.NET Action

时间:2013-12-12 06:28:40

标签: c# jquery ajax asp.net-mvc

所以我在我的asp.net mvc控制器中有这个Action,它接收一个int参数并返回一些依赖它的json。这就是行动的样子

Public JsonResult GetSomeData(int intParam)
{
    var someData = _someService.GetSomeDataByIntParam(intParam);
    return Json(someData);
}

所以这里没有什么特别之处,所需的所有工作都是由SomeService的实例完成的,然后动作才会返回json。这部分_someService.GetSomeDataByIntParam(intParam);平均需要35-80毫秒。 在前端我有和Jquery代码使Ajax调用此操作,当它得到答案时,它只是将数据放在DOM中的某个地方。这是jquery代码(包括一些razor

@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 = $('#some-from1-@intParam');
                someForm1.children('span.some-another-class').html(responseParam);

                var someForm2 = $('#some-from2-@intParam');
                someForm2.children('span.some-another-class').html(responseParam);
            }
        });
    </script>
}

int IntParams平均有3-10个元素。 js在呈现页面后立即执行。所以整个场景都是这样的。页面被绘制json数据被查询,当它被传递回js时,它被插入DOM中的某个地方。返回json的动作是在执行其中一个请求时排队。所以当这些时,假设对动作进行了5次ajax调用,一次只执行一次。 (这可以在不关闭会话状态的情况下使其异步吗?)第一个请求在30-80毫秒内得到答案,第五个请求在2-2.2秒内得到答案。这在我的应用程序中非常重要,所以我不想丢失任何毫秒。我不明白如果动作平均需要30-80毫秒,为什么第五个动作在2秒内得到答案。不应该像400(5 * 80)毫秒?或者这个呼叫排队是需要花费太多时间的事情?可以做些什么来进行一些优化。如果有10个以上的调用执行,我会想象它需要大约5秒左右的时间。所以无论如何可以做些什么来使整个事情变得快速。任何建议将不胜感激。 (即使在js代码中)

1 个答案:

答案 0 :(得分:1)

我认为当前观点的模型存在问题。

如果这是您当前的情况,请纠正我。 您在Model.IntParams中有某种单个数组,或者它可能是一个列表。 对于您向服务器发送请求的IntParams中的每个项目。 假设如果5或10中的项目计数,它将发送5或10请求,而在开发或测试时它将是罚款。获得生产数据后,它可以是100或1000,然后您需要发送那么多请求。 IIS将通过锁定会话来处理每个请求,我们不能将其视为并发处理。检查一下它可能会对您有所帮助jQuery Ajax - Running multiple requests against ASP.NET MVC

另外,我建议您为视图设置一个强大的模型,并显示您需要显示的所有属性。一旦你有强大的模型填充数据并传递给视图。

查看仅负责数据应如何显示?您可以在模型中设置标志,这样您只需要检查该条件并决定要执行的操作。它还使代码可读并易于被另一个与您合作的人理解。我认为您可以通过修改将数据填充到模型的模型和机制来提高性能。