Node.js 不是一種程式語言

今天突然意識到說「我會寫 Node.js 」時,其實是下意識把 Node.js 當成一種程式語言。

正確來說, Node.js 其實是一種 runtime environment, 專門用來執行 JavaScript 程式的環境,讓 JavaScript 不再侷限於只能在瀏覽器中運行。

所以千萬別在履歷上的程式語言一欄擺上 Node.js, 對於嚴謹的面試官來說是會扣分的一項行為(雖然篩選履歷的 HR 通常不會懂這個差異,即使如此,我們還是要把專業擺出來啊!)。

Node.js 現在經常應用在後端(backend)領域,主要由於其 event-driven 的架構以及非同步(asynchronous) I/O 的能力,使得 Node.js 相當適合應用在有著大量 I/O 的 Web 應用,或是對於即時性要求的聊天、遊戲等應用。

此外, Node.js 的核心特點是它是單執行緒的 process, 該執行緒跑著 1 個稱為 event loop 的重要功能,專門處理各種非同步事件,對於 I/O 類型的工作它可說是駕輕就熟,但不擅長應付重 CPU 密集型(CPU-bound)的工作,因為執行 CPU 運算時,它會佔據 event loop ,使它無法同時處理其他工作,從而導致效能下降,所以如果你的應用是 CPU 密集型的話,是無法享受 Node.js 所帶來的好處的,這時最好考慮透過更改系統架構,將 CPU 密集型的工作交給其他更適合的程式語言/框架/伺服器處理,讓 Node.js 專注在 I/O 類型的工作即可。

最後,也由於 Node.js 是單執行緒的 process, 即使有多個 CPU 核心,Node.js 也無法有效利用,它最多就只能跑在一個 CPU 核心上,所以在多核心 CPU 的伺服器上,我們通常都會執行多個 Node.js 的 process 以有效利用 CPU 並提升效能,這也是為什麼你會在多核心的伺服器上看到多個 Node.js 的後端應用跑會在不同的通訊埠的原因。

以上,希望這篇短文介紹能夠讓大家更懂什麼是 Node.js 以及它的優勢與侷限。

追蹤新知

看完這篇文章了嗎?還意猶未盡的話,追蹤粉絲專頁吧!

我們每天至少分享 1 篇文章/新聞或者實用的軟體/工具,讓你輕鬆增廣見聞提升專業能力!如果你喜歡我們的文章,或是想了解更多特定主題的教學,歡迎到我們的粉絲專頁按讚、留言讓我們知道。你的鼓勵,是我們的原力!

贊助我們的創作

看完這篇文章了嗎? 休息一下,喝杯咖啡吧!

如果你覺得 MyApollo 有讓你獲得實用的資訊,希望能看到更多的技術分享,邀請你贊助我們一杯咖啡,讓我們有更多的動力與精力繼續提供高品質的文章,感謝你的支持!