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的写法)。