我沒有確鑿的事實,但既然你問意見... :)
有在Chrome中講述的問題:有太多的網絡工作者可能會導致無聲崩潰(上限〜60-100 ,根據this bug report)。一般的問題是Web Workers至少在v8中是資源密集型的。
假設你將最終使多個HTTP調用,如果你在一個網絡工作者做同步HTTP調用:
- 從某種意義上說,你的交易的異步Web異步HTTP調用工人只會在混合中增加另一箇中間人,而你仍然需要異步管理事物。
- 如果你走的是更簡單,更節省資源的路線,只使用一個Web Worker,你將花費大量的時間等待它給你迴應。
- 另一方面,如果您使用多個網絡工作者,您可能需要跟蹤哪一個是免費的,哪一個忙碌等等,在這種情況下,您將創建一個本土調度程序,而不是使用出現在瀏覽器中的內容。
- 最後,網絡工作人員很貴(顯然),並且您最終可能會創建多個Web工作人員,以便他們可以坐下來等待HTTP呼叫完成。
我不認爲自己是這件事的專家,所以請把它拿出來看看它的價值。
更新:爲各種場景添加一些優點/缺點。
有些職業選手使用Web工作時,使同步和異步HTTP調用之間進行選擇時浮現在腦海/缺點:
- 一般情況下,同步請求將是更容易編寫,並會導致代碼易於跟隨。同步請求的一個缺點是它們可能會鼓勵編寫長的函數,這些函數應該劃分成更小的函數。
- 如果您正在進行一次調用,兩種方法完成所需的時間沒有區別,同步更好,因爲它更簡單一些。我說這只是簡單一點,因爲使用一個回調監聽器進行單個異步調用真的很簡單。
- 如果您要按特定順序進行多個呼叫,例如加載用戶的配置文件數據,然後根據其地址獲取本地天氣,則同步呼叫會更好,因爲它更容易編寫,而且很容易閱讀。閱讀它的主要內容是調用中的順序依賴關係將通過同步調用的選擇和它們在函數中的順序來清晰地概述。有更多的電話,這就更重要。如果有很多電話,複雜性的差異可能會很大。
- 如果您必須進行多個不需要以任何特定順序發生的調用,那麼異步請求會更好,因爲整個過程可能比同步請求快幾個數量級。您撥打的電話越多或連接速度越慢,總時間差異越顯着;這種差異會迅速增長(呈指數級增長?)。從閱讀代碼的人的角度來看,我認爲在這種情況下使用同步請求會導致誤導,因爲它暗示即使沒有這種調用,也會有調用的順序特性。從編寫一系列彼此不依賴的異步請求的角度來看,它不應該太糟糕,因爲您只需設置一個計數器,進行所有調用,在每個回調中遞增計數器並完成當計數器等於您所做的呼叫次數時。
這是可能的...並取決於您的要求,雖然AJAX不會是異步的AJAX! – geekman
我不能推薦SJAX(同步JavaScript和XML),但我希望看到一些難以理解的事實,而我的擔憂並不反映多線程環境中的行爲。 –
謝謝你們。我知道A在AJAX中的含義:)但我看到很多人在使用網絡工作者時都在做這樣的事情。 – Gecko