【问题标题】:Slow performance when simultaneously launching jQuery .load同时启动 jQuery .load 时性能下降
【发布时间】:2012-01-10 12:18:52
【问题描述】:

有时我的应用需要通过同时调用jQuery .load() 来填充多个内容区域。

尽管内容区域的加载时间低于 100 毫秒,但同时发生的请求越多,内容在文档上的显示速度就越慢。有时,6 个内容区域的时间可能长达 10-15 秒。

加载如下:

$("#MyDiv1").load("/My/Controller/Action/1");
$("#MyDiv2").load("/My/Controller/Action/2");
$("#MyDiv3").load("/My/Controller/Action/3");
...

任何关于如何解决这个瓶颈的建议都将不胜感激。

【问题讨论】:

  • 您在网络服务器中使用什么? PHP、ASP.NET、RoR?
  • 应用程序是在 ASP.NET MVC 3 框架上编写的,它托管在 IIS7.5 上

标签: jquery simultaneous


【解决方案1】:

ASP.NET 在同一会话下一次处理一个请求。因此,在第一个请求完成之前,第二个请求不会运行。这是为了避免线程问题。如果您使用无会话控制器,您应该会看到一些改进。

查看此链接:

What are some scenario's of having a Session-less Controller in ASP.NET MVC3?

【讨论】:

  • 这很有帮助。我确实在我的应用程序中使用了会话(我有一个托管的 SessionManager 静态变量,其中包含一些应用程序范围的变量) - 是否有替代方案?
  • 把Controller改成AsyncController能解决这个问题吗?
  • @Nick 这些特定调用是否使用会话?如果没有,请尝试将它们移动到无会话控制器。他们在修改数据吗?如果不是,您可以将无会话控制器标记为只读。
  • @Nick AsyncController 不会这样做。它只是将工作委托给一个单独的线程池,释放 IIS 线程池来处理其他请求。会话问题仍然存在。
  • 我用 [SessionState(SessionStateBehavior.ReadOnly)] 装饰了我的控制器,因为会话变量只需要读取而不需要写入。我应该继续从 Controller 继承还是更改为 AsyncController 是否有任何价值,以便工作在另一个线程上进行?
【解决方案2】:

尝试级联调用

$('#div1').load('...', function() {
    $('#div2').load('...', function() {
        $('#div3').load('...', function() {
            ....
        });
    });
});

【讨论】:

    【解决方案3】:

    那是因为 javascript 的工作方式。它不会在开始加载内容 2 和 3 之前等待完成加载内容 1,因此它将同时开始加载。所以你应该创建某种队列。

    类似:

    load array = new array()
    array[array.length+1]= "/My/Controller/Action/1";  
    array[array.length+1]= "/My/Controller/Action/2";  
    array[array.length+1]= "/My/Controller/Action/3";  
    loadContent();   
    function loadContent()    
    {
    $("#MyDiv").load(array[0] function(){
            array.shift();
           if(array.length>0)
              loadContent() ; 
        });
    }
    

    请注意,它没有经过测试,但它应该让您很好地了解您可以做什么

    【讨论】:

      猜你喜欢
      • 2019-10-19
      • 2012-02-12
      • 2018-08-20
      • 1970-01-01
      • 1970-01-01
      • 2020-02-05
      • 2011-11-07
      • 2019-03-12
      • 1970-01-01
      相关资源
      最近更新 更多