io.js入門(一) - 初識io.js

jopen 9年前發布 | 106K 次閱讀 io.js JavaScript開發

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

為何使用io.js

io.js跟NodeJS一樣,屬于事件驅動I/O的服務端平臺,以Event loop機制來無阻塞地、并發處理I/O,關于當初NodeJS的作者為何選用此機制來開發Node項目,可查閱我翻譯的這篇《Hands-on Node.js》—— Why? 。總而言之,io.js/NodeJS很適合用于開發I/O密集型應用,我們參照下下方的這張流程圖:

io.js入門(一)—— 初識io.js

圖中的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入門(一)—— 初識io.js

安裝

io.js的安裝非常簡單,直接從官網首頁下載對應安裝包進行安裝即可(由于要修改系統變量,故安裝過程得讓360等殺毒軟件放行),安裝完畢便能直接在cmd命令行界面,或者從io.js程序下的“io.js command prompt”命令界面直接進行調試,比如我們可以這樣查看io.js所使用的V8引擎版本:

   iojs -p process.versions.v8

執行結果:

io.js入門(一)—— 初識io.js

io.js入門(一)—— 初識io.js

第一個程序

我們隨便在一個地方,比如D盤根目錄下新建一個 test.js 文件,里面簡單地寫上這么兩句話就行:

var s = "hello world";
console.log(s);

然后我們從命令行上運行這個腳本(注意當前目錄路徑要轉到d盤)

   iojs test.js

執行如下,輸出了"hello world":

io.js入門(一)—— 初識io.js

我們可以試著寫點帶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入門(一)—— 初識io.js

可以看到該io.js已進入服務端執行狀態(監聽著本地的1337端口)。這時我們可以打開瀏覽器訪問 http://127.0.0.1:1337/ ,可以看到上述輸出的信息:

io.js入門(一)—— 初識io.js

io.js入門(一)—— 初識io.js

第一個網頁

像我剛接觸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/  便能成功查閱該頁面:

io.js入門(一)—— 初識io.js

當然上述的方法只是一個粗糙的示例(也未使用文件流),實際上在很多項目上我們還使用了各種實用的開發框架(如Express、Koa...),使用它們來加載頁面視圖,會是一種蠻有趣的事情,不過這是以后要介紹的東西了。

io.js入門(一)—— 初識io.js

如果對于上面示例的代碼,你并不能完全看懂或掌握,倒是沒關系,本章僅僅是開篇,讓你知道下io.js是怎么一回事(實際上它也沒那么神秘或復 雜),如果你是一名前端開發者,那么相信你會很快掌握io.js,因為它基本都由javascript來書寫的(當然你得掌握下commonJS的寫 法)。

本章就到這里,下章我們將介紹下io.js上支持的那些有趣的ES6特性。共勉~

來自:http://www.cnblogs.com/vajoy/p/4224883.html

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!