2012-06-18 37 views
6

我正在研究某種在線多用戶編輯器/ coop界面,這將在一個頁面生命週期內執行很多(如,數千個)ajax請求。Ajax密集頁面:重複使用相同的XMLHttpRequest對象或每次創建一個新對象?

什麼是最好的:(在穩定性,兼容性方面的「最佳」,避免麻煩)

  1. 創建一個XMLHttpRequest對象和重用,對於每一個HTTP請求

  2. 創建一個新的XMLHttpRequest對象用於每個HTTP請求

  3. 管理XMLHttpRequest對象的動態「池」,在啓動HTTP請求時創建一個新池,並且不存在現有對象,並標記先前創建的o bject爲「可用」時,它的最後一個請求已成功完成

我覺得1是不是一種選擇,導致一些請求可能會失敗,我可能會發起新的請求,而前一個還沒有完成,等等。

至於2,我猜這是內存泄漏,或者可能導致瘋狂的內存/資源使用情況。或者,我可以在請求完成時以某種方式關閉或刪除一個對象? (where/how?)還是JS垃圾收集器正確地處理了這個問題?

從來沒有嘗試過3之前,但它感覺像兩全其美。或者是一種不必要的方法,或者我仍然缺少潛在的問題?到底什麼時候我可以假設一個請求被完成(因此,這個對象可用於一個新的請求),是什麼時候收到readyState 4和http狀態200? (也就是說,我可以肯定,在此之後不會有更多更新或回調?)

+0

只是想知道你計劃使用什麼樣的服務器和你連接到什麼網絡,因爲這個腳本,如果你是成千上萬的請求是正確的,是極其資源使用 – gabeio

+0

我有一個殘酷的專用服務器可用於此。但是數千個請求只能在幾個小時內完成,而不是每秒鐘都有一個請求。更像是每分鐘幾次,但它可能會持續多個小時。 –

+0

很好,如果你需要更快的速度,比如每秒一個請求,我會建議使用flash或者一個java小應用程序。如果你需要更快的速度,我會建議使用flash或者一個java applet – gabeio

回答

3

創建一個新的,當你需要一個。一旦不再需要,GC將處理舊的問題。

但是,對於類似合作編輯器的情況,您可能需要考慮使用WebSockets而不是始終發送請求。小型HTTP請求的開銷很大,而WebSocket連接幾乎沒有開銷。

+0

謝謝,我現在要去簡單的方法(簡單地創建一個新對象)也進入WebSockets。可以肯定的是,你指的是新的HTML5 javascript websocket的東西,對吧? –

+1

是的,並且可能還有一個庫,例如'socket.io'來根據需要自動處理XHR回退。 – ThiefMaster

+0

啊,從來沒有聽說過,謝謝!有一件事,在http://socket.io/的代碼示例中,它似乎使用JavaScript代碼服務器端?誰或什麼應該執行該代碼? –

相關問題