【问题标题】:multiple ajax requests very slow mvc多个ajax请求非常慢的mvc
【发布时间】:2015-05-20 13:50:35
【问题描述】:

我有一个加载小部件仪表板的 ASP MVC4 应用程序。每个小部件都会执行一个异步 ajax 回调到服务器并返回一个部分。

出于某种原因,这些小部件需要大约 50 秒才能将内容替换为部分内容。 ajax 请求是即时的,并且在数据库端执行数据库查询也是即时的。大多数情况下这工作正常,但我认为这可能与网站的高使用率有关。

谁能推荐我可以做的任何事情来调试这个问题或确定瓶颈可能是什么?

$.ajax({
            cache: true,
            type: 'post',
            async: true,
            url: '/Overview/GetBillingWidget/',
            success: function (result3) {

                if (result3 == '') {
                    $('.widget-billing-container').replaceWith('');
                } else {
                    $('.widget-billing').html(result3);
                }

            },
            error: function () {

            }

        });
$.ajax({
        cache: true,
        type: 'post',
        async: true,
        url: '/Overview/GetQueryWidget/',
        success: function (result3) {

            if (result3 == '') {
                $('.widget-myquery-container').replaceWith('');
            } else {
                $('.widget-myquery').html(result3);
            }

        },
        error: function () {

        }

    });

【问题讨论】:

  • 如果您使用会话,请调查阻止。会话访问是序列化的,当多个请求大致同时访问时,阻塞会导致性能不佳。
  • 是的,我们为此广泛使用会话。屏蔽是什么意思?
  • ASP.Net 在请求开始时锁定会话。如果另一个请求在释放锁之前开始,它必须等待另一个完成,我相信增加了 500ms 的延迟。 (见stackoverflow.com/questions/3629709/…

标签: jquery sql-server asp.net-mvc asp.net-mvc-4 iis


【解决方案1】:

我在类似的仪表板(如应用程序)中遇到了同样的问题,这是因为 cmets 提出了会话锁定问题。默认情况下,当调用控制器操作时,会话会被锁定,直到它存在,因此在此过程中进入的任何调用都必须等到它被释放。

但是,通过一些智能编码,您可以完全避免会话变量,最好是通过在数据库中存储和读取数据。如果您的控制器仅读取会话变量(或根本不使用它们),您可以在控制器类的顶部添加此属性:

[SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly)]

这应该可以解决您在对控制器进行并行 ajax 调用时可能遇到的许多锁定问题。

【讨论】:

    猜你喜欢
    • 2020-01-17
    • 2018-03-22
    • 2017-02-14
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 2010-11-28
    • 1970-01-01
    相关资源
    最近更新 更多