為何要使用Node.js


這個問題很不容易回答,Node.js能作的事,用PHP, Python, Ruby之類的伺服器端腳本程式語言,都能作得到而且更簡單。Node.js在這幾年成為火紅的一種技術,其實不是沒有原因的,本文簡單的說說一些有關這個問題的解答,以及最近的新聞。

Node.js的出現是為了解決什麼問題?

Non-blocking I/O

傳統的以執行緒為基礎(thread-based)的執行模式,以餐廳來比喻,每個客人一進來餐廳就會分配一位服務生來專門服務它,一直到每個交易(transaction)結束前,假設客人需要點三道菜,服務生就會站在餐桌前等客人點完菜。

以執行緒為基礎的系統,唯一能擴大服務規模的方式,就是增加服務生,愈多的服務生代表能服務愈多的客人。不過也代表你在實體的費用上投資更多。

Node.js的以事件為基礎(event-based)的系統,以餐廳來比喻更貼近現在我們的生活中,客人走進餐廳,服務生會交給你菜單和點餐表、筆,然後去服務其他的客人,當你填好點餐表後,又回到排隊中等待和服務生說話。服務生可以不被阻塞(Non-blocking),這種系統可以很容易的提高規模,相對於以執行緒為基礎(thread-based)的執行模式,在實體的投資減少了很多。

Real Time(即時)

Node.js的創始者Ryan Dahl曾在接受訪問時,說到他是有天看到Flickr的相片上傳進度條受到啟發(受訪影片),瀏覽器客戶端要作這件事,必需要不斷和伺服器端進行查詢,這也就是傳統的request&response的http架構,Ryan思考如果伺服器只需要推送(push)更新給瀏覽器客戶端,客戶端不需要每次都要查詢。這個概念形成了目前Node.js的異步(asynchronous)處理方式的Event Loop(事件迴圈)。

傳統的網站伺服器視request&response為各自分離的事件,但事實上它們是Streams(串流)。透過Node.js可以實作更即時的網站應用程式,例如邊上傳影片邊壓縮格式的實際例子。

參考資料