2017-03-16 38 views
0

任何人都可以幫助我理解NodeJS的功能和對以下情況的性能影響。發送響應後多個回調函數期間對性能的影響

a。向Rest API終點「/ api/XXX」發出請求。在這個請求中,我返回觸發異步函數的響應,如下所示。

function update(req, res) { 
     executeUpdate(req.body); //Asynchronous function 
     res.send(200); 
} 

b。在這裏,我發送響應而不用等待函數完成,並且這個函數執行不同集合的四個mongodb更新。

問題:

  • 當我讀到,該工程的NodeJS單線程,如何 異步函數正在執行嗎?

  • 如果同一端點有多個請求,NodeJS的性能影響如何?

  • 的準確的NodeJS如何處理每個
    請求的異步函數,因爲當被的NodeJS運行單線程的,是有 內存問題的可能性?

+0

雖然這個問題很好,但問題卻是以一種非常糟糕的方式來構思的。你可以請更新適當的話嗎?請嘗試將其分解成大塊 –

回答

0
  • 總之,這取決於你在你的函數正在做什麼。

  • 節點中的同步功能在主線程上執行,因此,它們不會搶佔並執行,直到函數結束或者直到遇到 返回語句爲止。

  • 的異步函數,在另一方面,從主線程, 移除並且當異步任務上的
    單獨的工作線程完成將只被執行。

0

有,我認爲,在你的問題的答案的兩個不同的部分。

  1. 實際性能 - 其中包括CPU &內存性能。它也明顯包括速度。
  2. 理解爲以前的海報說,同步和異步。

在處理#1 - 實際性能時,測試它的真正唯一方法是在代碼上創建或使用測試環境。在基於您使用的系統的基本方法中,您可以查看頂部(linux)中的一些信息或Glances將爲您提供性能的基本概念,但爲了確切知道發生了什麼,您需要應用一些各種測試環境或編寫自己的測試。

接近#2 - 這不僅是需要了解的同步和異步過程,還有兩者的影響。這包括使用回調承諾。 這實際上完全取決於您正在嘗試編碼的當前進程。例如,許多Node程序員在調用MongoDB時似乎更喜歡使用promise,特別是當需要基於光標返回的多個調用時。

當您使用同步或異步過程時,確實沒有寫入石頭的公式。避免回調地獄是Node程序員試圖去做的事情。捕捉錯誤等是你總是需要小心的事情。正如我所說的,有些程序員在處理數據返回時總是會選擇Promises或Async。着名的Async庫加上Bluebird是許多情況下的選擇。

所有的說法,並記住你的問題是一般的,因此我的回答也是如此,爲了正確地知道對你的表現,內存,CPU和速度的影響,以及作爲對信息的回報或傳遞給瀏覽器,最好儘可能瞭解同步,異步,回調,承諾和錯誤捕獲。您會發現某些情況對於同步(以及更快)很有用,而其他情況則需要異步和/或承諾。

希望這有些幫助。