Node JS 是一顆新星, 最近相當紅. 從字尾 JS 看來, 當然就是指 Java Script. Node 嘛…我也查不到, 可能是因為它有網路的背景吧!
網路上介紹 node JS 的文章已經相當多了, 切入的角度也各有不同. 但最重要的一件事是: node 是一個 Java script 的 server. 首先要有 Java script 寫好的 .js 檔, node server 才能夠去執行它.
通常我們會在瀏覽器端執行 Java script, 例如寫個表單程式之類的, 使用 Java script 會很方便. 而 Node JS 是在伺服器端運行 Java script 用的, 甚至 Node JS 本身就可以當作 web server 的平台, 拿來建立 HTTP server 之用.
從技術面來看, node JS 基於 Google V8 的 Java script engine (這也是 Chomre 在用的), 並且增加了一些內建的函式庫. 基本上我們可以找到其他一些性質相同的替代方案, 例如 common JS, RequireJS 等等. 相關訊息可以參考其他連結.
Common JS 和 node JS 都是用 synchronous module, 而 Require JS 採用 AMD (asynchronous module definition), 遇到需要的載入的模組, 才會把它叫進來.
Bridging the module gap between Node.js and browsers
Universal modules (browser, Node.js): imports and universal tests
Synchronous module 的好處是全部的 module 已經進了 memory, 所以可以很快回應. Node JS 只用一個 thread, 又強調 event driven. 所以反應迅速確實很重要. 當然, 如果 user 硬是寫了一個 blocking 的 Java script, 那麼 Node JS 還是會讓它卡住. 詳情可以看這裡:
Node入門 中間有一段專講 Blocking與 Non-Blocking.
有些人的觀點是拿 node JS 和 PHP 比較. 畢竟 PHP 和 node JS 的差異很大, 直接比較並不太公平. 只能看出 node JS 的 event driven 寫起來比較省事. 另外一些人則是拿 node JS 和 AJAX 類比, 主要是討論兩者會不會都是一窩蜂? 至於在現實生活中, 這兩者倒是可以並存.
Node JS 真正長什麼樣子呢? 其實安裝起來就知道了. 其中有一個 node.exe 和一個 node_modules 的目錄, 好東西都在目錄裡. 支援的 module 包括 fstream. mode-uuid, request…等等. 安裝的連結在下面.
支援 node JS 的 Java script, 可以看 “Node入門" 裡面這個例子:
[圖片遺失]
這是一個 node 可以執行的 server.js, 只要安裝好 Node, 就能用 node server.js 產生一個聽 8888 port 的 HTTP server.
每當 port 8888 收到請求, call back function onRequest() 就會印出 Hello World. 如果沒有收到 port 8888 的訊號, 執行此 Javascript 只會印出 Server has started.
如果用匿名函數來寫, onRequest() 就省略不計了, 但 call back 的精神還在. 這也是 node JS 支援的語法.
總結一下, 如果我們想在 server 端處理 Java script, 使用 node JS 會是不錯的選擇. 至於在 web browser 端使用 Java script, 交給 Google V8 engine 就可以了, 不需要用到 node JS. 如果大家想學 node JS, 這幾個網址相當不錯:
Node JS 發明人 Ryan Dahl 自己做的簡介影片如下: