io.js入門(一) - 初識io.js
io.js可以說是徹底從NodeJS里分離出來的一條分支,其事情始末可以查看這篇報道,此處便也不贅言。既然是分支,io.js便也基本兼容NodeJS的各種API,連執行指令也依舊兼容Node的 node XXX (新指令是 iojs XXX )。不過io.js采納了最新版本的V8引擎,并也將會時刻跟進V8的更新,也因此我們可以輕松地在io.js上搶先使用那些JavaScript ECMA-262規范上的新特性。
io.js的首個版本是在13號,也就是昨天發布的,它基于3.31.71.4版本的V8引擎,良好地支持著許多NodeJS將在0.12.x才會開始支持的ES6特性。
io.js的官網是iojs.org ,從上面那行醒目的“Bringing ES6 to the Node Community!”,我們便能知道io.js相比NodeJS,會趨向于添加更多好用的新特性,并以此作為自己的主打和口號。
為何使用io.js
io.js跟NodeJS一樣,屬于事件驅動I/O的服務端平臺,以Event loop機制來無阻塞地、并發處理I/O,關于當初NodeJS的作者為何選用此機制來開發Node項目,可查閱我翻譯的這篇《Hands-on Node.js》—— Why? 。總而言之,io.js/NodeJS很適合用于開發I/O密集型應用,我們參照下下方的這張流程圖:
圖中的event loop中我們假設有A、B、C三個等待執行的命令隊列,其中A和B都會在其執行的過程中觸發I/O操作(圖中右側紅色圓角矩形框,具體I/O操作可舉例 為“讀取數據庫數據”)。以A觸發自身的I/O操作為例,常規的動態語言可能都會停住整個隊列,等待I/O回饋后,才結束中斷、繼續運行下去。如果遇到I /O很耗時的情況,進程就會白白等待而浪費不少時間。為了解決此問題,NodeJS采用了event loop機制,將所有I/O操作都扔到線程池去處理,從而不再阻塞命令隊列的進一步執行操作。因此從上圖可以看到,即使A觸發了自身的I/O,也不會阻塞 隊列的下一個命令B的執行。
安裝
io.js的安裝非常簡單,直接從官網首頁下載對應安裝包進行安裝即可(由于要修改系統變量,故安裝過程得讓360等殺毒軟件放行),安裝完畢便能直接在cmd命令行界面,或者從io.js程序下的“io.js command prompt”命令界面直接進行調試,比如我們可以這樣查看io.js所使用的V8引擎版本:
iojs -p process.versions.v8
執行結果:
第一個程序
我們隨便在一個地方,比如D盤根目錄下新建一個 test.js 文件,里面簡單地寫上這么兩句話就行:
var s = "hello world"; console.log(s);
然后我們從命令行上運行這個腳本(注意當前目錄路徑要轉到d盤):
iojs test.js
執行如下,輸出了"hello world":
我們可以試著寫點帶io.js API的復雜一點的程序,既然兼容NodeJS,那我們就直接拿NodeJS官網首頁的示例來試試。我們把test.js改為:
該段代碼創建了一個服務端http服務,監聽了本地的1337端口,并在命令行輸出 “Server running at http://127.0.0.1:1337/” 語句。如果有客戶端訪問http://127.0.0.1:1337/ ,則會向客戶端輸出http頭部信息以及顯示一行 “Hello World” 。
我們照樣用
iojs test.js
來執行腳本:
可以看到該io.js已進入服務端執行狀態(監聽著本地的1337端口)。這時我們可以打開瀏覽器訪問 http://127.0.0.1:1337/ ,可以看到上述輸出的信息:
第一個網頁
像我剛接觸NodeJS的時候,會蠻在意一個問題,就是如果我要制作一個站點頁面的話,總不該要我把一段段標簽都以res.write()的形式輸出到客戶端吧。答案是我們可以這么做,但肯定不會喜歡這么做。
NodeJS提供了不少實用的API,比如文件系統接口,我們可以寫一個簡單的 index.html 頁面,并把它放在D盤根目錄上:
然后把我們的 test.js 更改為:
var http = require('http'), fs = require('fs'); fs.readFile('./index.html', function(err,html){ if (err) { throw err; } http.createServer(function(req,res) { res.writeHeader(200,{"Content-Type": "text/html"}); res.end(html); }).listen(1337); });
接著繼續執行指令
iojs test.js
然后在瀏覽器訪問 http://127.0.0.1:1337/ 便能成功查閱該頁面:
當然上述的方法只是一個粗糙的示例(也未使用文件流),實際上在很多項目上我們還使用了各種實用的開發框架(如Express、Koa...),使用它們來加載頁面視圖,會是一種蠻有趣的事情,不過這是以后要介紹的東西了。
如果對于上面示例的代碼,你并不能完全看懂或掌握,倒是沒關系,本章僅僅是開篇,讓你知道下io.js是怎么一回事(實際上它也沒那么神秘或復 雜),如果你是一名前端開發者,那么相信你會很快掌握io.js,因為它基本都由javascript來書寫的(當然你得掌握下commonJS的寫 法)。
本章就到這里,下章我們將介紹下io.js上支持的那些有趣的ES6特性。共勉~
來自:http://www.cnblogs.com/vajoy/p/4224883.html