2012-01-10 51 views
0

偶尔我的应用需要通过同时调用jQuery .load()来填充多个内容区域。同时启动jQuery时出现性能下降.load

尽管内容区域在100毫秒以内加载,但同时存在的请求数量越多,文档上显示的内容越慢。对于6个内容区域,有时这可能长达10-15秒。

负载发起如下:

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

关于如何打击这个瓶颈任何建议,将不胜感激。

+0

你在Web服务器使用? PHP,ASP.NET,RoR? – epignosisx 2012-01-10 12:23:57

+0

该应用程序是在ASP.NET MVC 3框架上编写的,它托管在IIS7.5上 – Nick 2012-01-10 12:24:46

回答

1

ASP .NET在同一个Session下一次处理一个请求。所以第二个请求将不会运行,直到第一个请求完成。这是为了避免线程问题。如果使用Sessionless控制器,应该会看到一些改进。

退房此链接:

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

+0

这非常有帮助。我确实在我的应用程序中使用会话(我有一个托管的SessionManager静态,它包含一些应用程序的广泛变量) - 是否有替代方案? – Nick 2012-01-10 13:17:28

+0

会改变控制器到一个AsyncController解决这个问题? – Nick 2012-01-10 13:43:33

+0

@Nick做这些特定的调用使用Session吗?如果不是,请尝试将它们移到无Sessionless控制器。他们正在修改数据吗?如果没有,您可以将无会话控制器标记为ReadOnly。 – epignosisx 2012-01-10 13:58:37

1

这是因为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() ; 
    }); 
} 

记下未经测试,但它应该给你的你可以做什么

1

尝试级联呼叫的良好ideer

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