2012-12-28 31 views
15

我想知道你對此有何看法。建議在web worker中使用同步請求(XMLHttpRequest)?我可以找到什麼問題?關於網絡工作者同步請求的意見

我一直在測試這個在我的應用程序,我沒有找到任何麻煩。但是由於jQuery和AJAX的舊體驗,我害怕這種同步行爲。 我的應用程序從數據庫中的多個表中獲取大量數據,這需要一段時間。對於從表格中檢索的每一組數據,我需要立即處理它,不要將整個事情拖延太久。同時,用戶正在與瀏覽器進行交互,因此可能會被阻止,並且我認爲網絡工作者可以正常工作。 你認爲這是一個很好的解決方案嗎?或者我應該嘗試使用異步請求?

謝謝。

+0

這是可能的...並取決於您的要求,雖然AJAX不會是異步的AJAX! – geekman

+0

我不能推薦SJAX(同步JavaScript和XML),但我希望看到一些難以理解的事實,而我的擔憂並不反映多線程環境中的行爲。 –

+0

謝謝你們。我知道A在AJAX中的含義:)但我看到很多人在使用網絡工作者時都在做這樣的事情。 – Gecko

回答

15

我沒有確鑿的事實,但既然你問意見... :)

有在Chrome中講述的問題:有太多的網絡工作者可能會導致無聲崩潰(上限〜60-100 ,根據this bug report)。一般的問題是Web Workers至少在v8中是資源密集型的。

假設你將最終使多個HTTP調用,如果你在一個網絡工作者做同步HTTP調用:

  • 從某種意義上說,你的交易的異步Web異步HTTP調用工人只會在混合中增加另一箇中間人,而你仍然需要異步管理事物。
  • 如果你走的是更簡單,更節省資源的路線,只使用一個Web Worker,你將花費大量的時間等待它給你迴應。
  • 另一方面,如果您使用多個網絡工作者,您可能需要跟蹤哪一個是免費的,哪一個忙碌等等,在這種情況下,您將創建一個本土調度程序,而不是使用出現在瀏覽器中的內容。
  • 最後,網絡工作人員很貴(顯然),並且您最終可能會創建多個Web工作人員,以便他們可以坐下來等待HTTP呼叫完成。

我不認爲自己是這件事的專家,所以請把它拿出來看看它的價值。

更新:爲各種場景添加一些優點/缺點。

有些職業選手使用Web工作時,使同步和異步HTTP調用之間進行選擇時浮現在腦海/缺點:

  • 一般情況下,同步請求將是更容易編寫,並會導致代碼易於跟隨。同步請求的一個缺點是它們可能會鼓勵編寫長的函數,這些函數應該劃分成更小的函數。
  • 如果您正在進行一次調用,兩種方法完成所需的時間沒有區別,同步更好,因爲它更簡單一些。我說這只是簡單一點,因爲使用一個回調監聽器進行單個異步調用真的很簡單。
  • 如果您要按特定順序進行多個呼叫,例如加載用戶的配置文件數據,然後根據其地址獲取本地天氣,則同步呼叫會更好,因爲它更容易編寫,而且很容易閱讀。閱讀它的主要內容是調用中的順序依賴關係將通過同步調用的選擇和它們在函數中的順序來清晰地概述。有更多的電話,這就更重要。如果有很多電話,複雜性的差異可能會很大。
  • 如果您必須進行多個不需要以任何特定順序發生的調用,那麼異步請求會更好,因爲整個過程可能比同步請求快幾個數量級。您撥打的電話越多或連接速度越慢,總時間差異越顯着;這種差異會迅速增長(呈指數級增長?)。從閱讀代碼的人的角度來看,我認爲在這種情況下使用同步請求會導致誤導,因爲它暗示即使沒有這種調用,也會有調用的順序特性。從編寫一系列彼此不依賴的異步請求的角度來看,它不應該太糟糕,因爲您只需設置一個計數器,進行所有調用,在每個回調中遞增計數器並完成當計數器等於您所做的呼叫次數時。
+0

不錯。雖然你說你不是這方面的專家,但你的意見非常有趣。 – Gecko

+0

也許我沒有解釋所有的細節。我想要一個獨特的網絡工作者在後臺執行此任務。我的意思是,一個帶有for循環的web worker從每個表中檢索數據,做一些解析和更多的東西。這適用於同步調用,但我認爲如果我想使用異步調用(這是否更好?),我必須使用一些回調函數。這不是我應用中唯一的網絡工作人員,至少還有一個人正在同時運行其他計劃任務。你認爲在這種情況下使用網絡工作者是不合理的嗎?謝謝。 – Gecko

+2

Thx的細節。網絡工作者是偉大的,我不是故意暗示他們應該避免。聽起來像是爲此使用一個很有意義。對我的問題是使用同步XHR是否合理。它的編程更少,因爲你只需要啓動/停止Web Worker而不是啓動和處理XHR。真的歸結爲如果這是值得的過程花費更長的時間?如果您有很多HTTP調用可能會更長。我沒有看到使用異步HTTP請求的缺點,除非你只需要一個。 – tiffon