2015年6月24日 星期三

關於 Node.js

我關注 Node.js 的發展好久一段時間了, 大概 2012 年底 v 0.8.16 時我就下載安裝試玩, 但沒時間繼續研究就擱下了. Node.js 吸引我的原因, 是因為它是我夢想已久的完美開發平台, 前後端都用 Javascript 開發, 程式語言能力需求單純. 我最早玩網頁設計是從 ASP 開始, 當時大部分的人都是用 VB Script 來寫, 但我找到一本用 Javascript 寫 ASP 的書, 我覺得很棒, 這樣我就不用再去學一種程式語言了. 但也因為如此, 我很晚才學 PHP.

以前用 Javascript 寫 ASP 時, 因為只能在微軟 IIS 伺服器上才能這樣玩, 似乎有點被綁架的感覺. 我就在想, 怎麼沒人寫一個不需要 IIS 就可以跑 Javascript 的後端平台呢? 當 Node.js 橫空出世, 我知道, 夢幻平台終於出現了. 不過 Node.js 並不是像 PHP 是一個必須寄託在 Apache 伺服器執行的解譯器, Node.js 本身就內建了 HTTP 伺服器支援函式, 可以很容易地自己實作一個網站伺服器. 關於 Node.js 參見 Wiki :

Wiki : Node.js

下載 Node.js 請連線到官網 :

https://nodejs.org/

點 download 可選擇下載項目, 目前是 v 0.12.5 版 :


我的電腦是 Win7 64 位元, 所以下載 Windows Installer 64-bit, 這會下載 node-v0.12.5-x64.msi 檔; 但也可以下載免安裝的可執行檔 node.exe :


執行安裝檔會將 Node 安裝到程式集 C:\Program Files\nodejs\ 下, 並自動在環境變數 path 中加入 C:\Program Files\nodejs\, 然後打開命令提示視窗或者程式集中的 Node.js command prompt 就可以直接使用 node 指令了.


打開控制台的系統查看環境變數 path, 果然已經自動加入 nodejs 目錄了 :


參考 :

用 Node.js 學 JavaScript 語言(1)簡介與安裝
用 Node.js 學 JavaScript 語言(2)基本控制
# 用 Node.js 學 JavaScript 語言(3)函數、參數與閉包
# 使用 NODE.JS 來達成電腦網頁與手機網頁即時互動

如果下載的是 免安裝的可執行檔 node.exe, 則只能在 node.exe 所在目錄下才能執行 node 指令, 或者手動將 node.exe 加入 path 路徑中也可以, 我覺得可執行檔還蠻方便的, 只要下載一個 binary 檔就可以玩 Node 了.

網路上有 Node.js 的線上入門電子書 :

# Node 入門

而市面上也已有數本 Node.js 的中文書, 其中我覺得最適合初學者的是松崗的這本 "不一樣的 Node.js" :


以及佳魁的 "Google 御用網頁語言 Node.js" :


如果要更深入了解 Node 的技術細節, 就要找這本博碩文化出版, 大陸 Node 傳道先鋒朴靈 (田永強) 寫的 "深入淺出 Node.js" :

以下就以 "不一樣的 Node.js" 書中的範例來測試. 首先來測試最常用的 console.log() 輸出指令. 先用記事本打一個 js 檔, 內容很簡單, 只有一行 :

console.log("hello!");

然後存成 hello.js, 就可以用 node 執行了 :

D:\Node.js>node hello.js
hello!

接著來測試計時器函式 console.time() 與 console.timeEnd(), 主要用在計算程式執行所耗費之時間 :

console.time("test");  //命名計時器為 test
for (var i=0; i<10; i++) {
  console.log("index=" + i);
  }
console.timeEnd("test");  //停止計時器 test

把上面程式碼存成 duration.js 執行 :

D:\Node.js>node duration.js
index=0
index=1
index=2
index=3
index=4
index=5
index=6
index=7
index=8
index=9
test: 5ms

耗費時間 5 毫秒.

最後來測試如何用 Node.js 寫一個網站伺服器, 程式 http.js 如下 :

var http=require("http");  //載入 http 模組
var server=http.createServer(function(req,res){  //建立伺服器物件
  res.writeHead(200,{"Content-Type":"text/plain"});  //輸出回應標頭
  res.end("Hello World\n");  //輸出回應內容
  })
server.listen(12345);  //監聽 12345 port
console.log("Server running at 127.0.0.1:12345/");  //顯示伺服器執行中

存檔後執行 http.js :

E:\Node.js>node http.js
Server running at 127.0.0.1:12345/

可見伺服器已經啟動並監視 12345 埠, 這時用瀏覽器連到 127.0.0.1 (localhost) 的 12345 port :

可見用 Node.js 很簡單就建立了一個網頁伺服器了, 用 Node.js 架站根本不需要安裝甚麼 Apache 伺服器, 自己就可以搞一個出來. 以上便是 Node.js 的簡單測試.

Node.js 發展潛力很大, 連嵌入式系統的 Raspberry Pi 上也可以跑. 最重要的是, Node,js 底層採用 Chrome 瀏覽器的 Javascript V8 引擎, 效能所向無敵; 加上採用單執行緒, 非同步 I/O 與事件驅動架構, 不像傳統多執行緒頻繁的 Context 切換, 執行效能遠超過大部分現行架構, 值得繼續關注其發展.

據 "深入淺出 Node.js" 書中描述, 為什麼 Javascript 會成為 Node.js 的程式語言呢? 因為 Node.js 的發明人 Ryan Dahl 研究發現, 設計高性能 Web 伺服器的方向應該朝向事件驅動與非阻塞式 I/O. Javascript 在瀏覽器中本來就是事件驅動模式, 而 Javascript 長期在後端沒有市場, 所以在 I/O 部分沒有任何包袱, 可以直接導入非阻塞式 I/O, 加上 V8 引擎的高性能, 於是 Javascript 就雀屏中選了.

最後來看看知名的軟體專案版本控管網站 GitHub 上的程式語言排行榜, Javascript 是關注度第一的語言 :

http://githut.info/


Javascript 這個以前被嫌得要死的程式語言, 在前端框架 jQuery 與後端 Node.js 的聯手拉抬下, 終於展翅高飛啦! 特別是 Node.js, 它讓 Javascript 的彷彿吃了大補丸, 能力大釋放, 脫離瀏覽器的牢籠, 變成活力十足的脫韁野馬.

Node.js 託管主機參考 :

# OpenShift – Red Hat 最新的雲端主機服務
# OpenShift 教學(一):申請免費空間、安裝WordPress
https://www.openshift.com/

Node.js 的桌面應用參考 :

用 JavaScript 開發桌面應用程式:node-webkit

其他 :

# node.js教學-操作MySQL資料庫
# 如何在 Windows 上設定 node.js 的開發環境

沒有留言 :