2010-07-12 47 views
5

我想知道共識是多少同時異步阿賈克斯請求通常是允許的。合理數量的同步異步阿賈克斯請求

我問的原因是我正在開發一個個人網絡應用程序。大多數情況下,我會將我的請求降到一個。但是,在一些情況下,我最多同時發送4個請求。這會導致一些延遲,因爲瀏覽器一次只能處理2個。

目前,延遲在可用性方面並不是問題。如果有的話,我必須擔心可擴展性。但我試圖堅持最佳實踐,儘可能合理。你怎麼看? 4個請求是否合理?

回答

2

這真的取決於它是否正常工作。如果應用程序的邏輯是建立在4個同步請求有意義的基礎上的,那就這樣做。如果通過將多個請求打包成一個請求而不影響邏輯,則可以這樣做,但前提是它不會使代碼更復雜。保持它簡單直接,直到你有問題,然後你可以開始優化。

但是你可以問自己,應用程序的設計是否可以改進,不需要多個請求。

另請檢查它是否速度很慢。同時的http請求不一定以正確的順序在服務器上執行,它們也可能以不同的順序返回。這可能會給您遇到的問題只會在較慢的線路上遇到。

2

這很難回答,不知道一些細節。如果你只是發出請求並忘記它們,那麼4個請求可能會很好,20個 - 只要用戶體驗不會受到性能下降的傷害。但是,如果您必須從服務中收集信息,那麼協調這些響應可能會變得棘手。這可能是需要考慮的事情。

克里斯蒂安的上一個答案有一個好處 - 檢查一個慢速連接。提琴手可以提供幫助,因爲它允許您通過模擬不同的連接速度(56K及以上)來測試慢速連接。

您也可以考慮向控制服務發出一個可能包含一條或多條消息的異步請求,然後可以將這些消息傳遞給相應的服務,收集結果並返回給客戶端。有多個異步請求被觸發然後在不同時間返回可能會給用戶帶來波濤洶涌的體驗,因爲每個響應都會在不同時間在頁面上呈現。

0

我不是網絡專家,但對於中小型應用程序來說,可能四個並不是問題,但是,它越大,服務器負載越高,最終可能會導致問題。這實際上不能回答你的問題,但這裏有一個建議。如果延遲不是問題,爲什麼不使用隊列。

var request = []//a queue of the requests to be sent to the server 

request[request.length] = //whatever you want to send to the server 
startSend(); 

function startSend(){//if nothing is in the queue go ahead and send this one 
    if(request.length===1){ 
    send(); 
    } 
} 

function send(){//the ajax call to the server using the first request in queue 
    var sendData = request[0]; 
    //code to send the data 
    //then when you get the response (I can't remember exactly the code for it) 
    //send it to a function to process the data 
} 

function process(data){ 
    request.splice(0,1); 
    if(request.length>0){//check to see if you need to do another ajax call 
    send(); 
    } 
    //process data 
} 

這可能不是做的最好的方式,但是這是你也許可以修改它做2個請求,而不只是一個想法。此外,也許你可以修改它發送儘可能多的請求,因爲它們在隊列中作爲一個請求。然後服務器將它們分開並處理每一個並將數據發回。一次或甚至一次得到它,因爲服務器可以多次刷新數據。您只需確保您正確解析響應文本。

0

以我的經驗1是最好的數字,但我會同意可能會有一些罕見的情況,可能需要同時通話。

如果我記得,IE是唯一的瀏覽器仍然限制連接到2.這會導致您的請求爲隊列,並且如果您的前兩個請求花費的時間超過預期或超時,其他兩個請求將自動失敗。在某些情況下,您還會在IE中遇到煩人的「允許腳本繼續」對話框。

如果你的用戶在所有4個請求返回之前都不能做任何事情(特別是IE瀏覽器的JavaScript性能下降),我會創建一個傳輸對象,它包含所有請求的數據,然後返回一個可以返回的傳輸對象解析並委託返回。

4

我敢肯定瀏覽器會限制你可以擁有的連接數。

如果您擁有Firefox,請輸入about:config,然後查找network.http.max-connections-per-server,這會告訴您您的最大值。我幾乎肯定這也是AJAX連接的限制。我認爲IE限制爲2.我不確定Chrome或Opera。

編輯:

在Firefox 23名network.http.max-connections-per-server偏好不存在,但有一個network.http.max-persistent-connections-per-server,默認值是6。