2012-01-10 50 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() { 
      .... 
     }); 
    }); 
});