io.js能夠說是完全從NodeJS裏分離出來的一條分支,其事情始末能夠查看這篇報道,此處便也不贅言。既然是分支,io.js便也基本兼容NodeJS的各類API,連執行指令也依舊兼容Node的 node XXX (新指令是 iojs XXX )。不過io.js採納了最新版本的V8引擎,並也將會時刻跟進V8的更新,也所以咱們能夠輕鬆地在io.js上搶先使用那些JavaScript ECMA-262規範上的新特性。 javascript
io.js的首個版本是在13號,也就是昨天發佈的,它基於3.31.71.4版本的V8引擎,良好地支持着許多NodeJS將在0.12.x纔會開始支持的ES6特性。 html
io.js的官網是iojs.org ,從上面那行醒目的「Bringing ES6 to the Node Community!」,咱們便能知道io.js相比NodeJS,會趨向於添加更多好用的新特性,並以此做爲本身的主打和口號。 前端
爲什麼使用io.js java
io.js跟NodeJS同樣,屬於事件驅動I/O的服務端平臺,以Event loop機制來無阻塞地、併發處理I/O,關於當初NodeJS的做者爲什麼選用此機制來開發Node項目,可查閱我翻譯的這篇《Hands-on Node.js》—— Why? 。總而言之,io.js/NodeJS很適合用於開發I/O密集型應用,咱們參照下下方的這張流程圖: node
圖中的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 框架
執行結果: oop
第一個程序
咱們隨便在一個地方,好比D盤根目錄下新建一個 test.js 文件,裏面簡單地寫上這麼兩句話就行:
var s = "hello world"; console.log(s);
而後咱們從命令行上運行這個腳本(注意當前目錄路徑要轉到d盤):
iojs test.js
執行以下,輸出了"hello world":
咱們能夠試着寫點帶io.js API的複雜一點的程序,既然兼容NodeJS,那咱們就直接拿NodeJS官網首頁的示例來試試。咱們把test.js改成:
var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World\n'); }).listen(1337, '127.0.0.1'); console.log('Server running at http://127.0.0.1:1337/');
該段代碼建立了一個服務端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盤根目錄上:
<!doctype html> <html> <head> <meta charset="utf-8"> <title>io.js</title> </head> <body> 這是你的首個站點頁面 </body> </html>
而後把咱們的 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的寫法)。