2011-08-01 136 views
4

我問你,是因爲我沒有任何想法...Ajax請求的時間太長

我做了從服務器獲取較小的數據的Ajax請求。 json的答案已經被服務器緩存了,所以速度非常快。

window.xhr = $.ajax({ 
url: domain+'index.php?fx_action=ajax&fx_mode=continents&fx_type=countries&fx_ajaxid='+window.currentajaxrequest+'&fx_id='+window.id+'&fx_page='+(window.page-1)+'&fx_pager='+window.pager+'&fx_order='+window.order, 
type: 'POST', 
dataType: 'json', 
timeout: 5000, 
cache: false, 
async: true, 
beforeSend: function() { 
     ... 
    }, 
    error: function (xhr, ajaxOptions, thrownError) { 
     return false; 
    }, 
    success: function (data) { 
     ... 

但答案的時間上滑動的規模龐大,有時需要1秒,有時剛67的毫秒...

continents.js:65 http://teszt.domain.com/index.php?fx_action=ajax&fx_mode=continents&fx_type=countries&fx_ajaxid=0&fx_id=6&fx_page=1&fx_pager=9&fx_order=name 
continents.js:100 start: 0 
continents.js:101 beforesend: 9 
continents.js:102 success: 5087 
continents.js:103 complete: 5096 
continents.js:65 http://teszt.domain.com/index.php?fx_action=ajax&fx_mode=continents&fx_type=countries&fx_ajaxid=1&fx_id=6&fx_page=2&fx_pager=9&fx_order=name 
continents.js:100 start: 0 
continents.js:101 beforesend: 9 
continents.js:102 success: 70 
continents.js:103 complete: 77 
continents.js:65 http://teszt.domain.com/index.php?fx_action=ajax&fx_mode=continents&fx_type=countries&fx_ajaxid=2&fx_id=6&fx_page=3&fx_pager=9&fx_order=name 
continents.js:100 start: 0 
continents.js:101 beforesend: 11 
continents.js:102 success: 301 
continents.js:103 complete: 304 

在得到同樣的數據結構幾乎相同的千字節大小。一切都由服務器緩存。

在服務器端,php的運行時間總是大約30-40ms。我的錯誤是什麼?

+0

我在本地運行的Web服務器上有類似的問題。我會想象它會更快,但令人驚訝的是一些網站比它有更好的表現! – Blender

+0

也許服務器很慢?也許在你的測試PC上運行一個洪流客戶端,這會混淆所有連接(確定我遇到了這個問題:D) – GolezTrol

+1

瀏覽器只對並行服務器執行有限數量的請求。根據一致請求的數量,這可能會有所不同,因爲有些請求在執行之前需要等待。 – hakre

回答

1

除了服務器上的網絡速度和性能高峯之外,您可能會遇到2個到瀏覽器中相同主機名的活動連接數的限制。幾個問題:

  • 您是否有其他請求可以同時運行?
  • 此腳本是否在頁面啓動時運行?如果是這樣,那可能是劍與其他資源請求打架。

我會建議看看螢幕上的網絡面板,看看你的請求正在發生什麼。

+0

1)不,我不知道。 2)Nop它與點擊綁定。例如:$(「。pager span」)。live(「click」,function(){if(window.returnedajaxrequest!= window.currentajaxrequest){window.xhr.abort();} if(($(this) .hasClass(「mod」))&&!($(this).hasClass(「disabled」))){if($(this).attr(「rel」)==「f」){window.page = 1 ; showCountries(); ... etc.' –