文档章节

io.js入门(一)—— 初识io.js

开源oschina
 开源oschina
发布于 2015/01/14 22:31
字数 1397
阅读 217
收藏 16

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改为:

复制代码
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的写法)。

本文转载自:

共有 人打赏支持
开源oschina

开源oschina

粉丝 42
博文 55
码字总数 22254
作品 0
九龙坡
私信 提问
Node.js 4.0 将包含最新 V8,下个月发布!

第一个全新的 io.js/node.js 结合版本很快就要发布了! 上周是个正常的旧金山的夏天,阳光明媚,偶尔有些热风。新 Node.js 基金会组织了一次聚会,40 位 Node.js 贡献者自 Collaborator Sum...

oschina
2015/08/15
8.2K
43
io.js 1.0.0 正式发布,支持 ES6 语言特性!

io.js 1.0.0 正式发布,此版本现已提供下载。 从 Node.js v0.10.35 以来的常规改进如下: 动态升级绑定 io.js 的 V8 JavaScript 引擎,从 3.14.5.9 in Node.js v0.10.35 和 3.26.33 in Node....

oschina
2015/01/14
8K
36
性能对决:Node.js vs io.js v2.0.0

我们注意到 io.js v2.0.0 RC 版公告中有些有趣的内容。这个社区版的 Node.js 同样基于 V8 引擎实现,而且主版本提交的频率远高于它的父项目(Node.js)。 就像我们之前提到的,之前我们热衷于...

oschina
2015/05/12
9.8K
29
io.js 2.3.4/1.8.4 发布,服务器 JS 引擎

io.js 2.3.4 发布,值得关注的改进如下: openssl:升级至 OpenSSL 1.0.2d,修复 CVE-2015-1793 (Alternate Chains Certificate Forgery) (Shigeki Ohtsu) #2141 npm:升级至 npm v2.12.1,发......

oschina
2015/07/10
1K
11
Node.js 和 io.js 准备合作!合久必分,分久必合?

因为对 Node.js 管理方 Joyent 公司不满,多位核心开发者自创门户建立了分支 io.js,其开发非常活跃。两个互相竞争的项目如今正在 Node.js Foundation 的名义下准备合并, 合并完成之后 gith...

oschina
2015/05/05
10.3K
39

没有更多内容

加载失败,请刷新页面

加载更多

rabbitmq安装教程

RabbitMQ有Windows与Linux版本的,这里先写Windows版本的安装。 以前安装软件总是在百度上找某某安装教程,结果能按照教程安装好的软件真的不多。想起先前以为大牛说的一句话,去官网按照官网...

em_aaron
今天
6
0
Android 贝塞尔曲线实践——波浪式运动

一、波浪效果如下 贝塞尔曲线自定义波浪效果的案例很多,同样方法也很简单,大多数和本案例一样使用二次贝塞尔曲线实现,同样还有一种是PathMeasure的方式,这里我们后续补充,先来看贝塞尔曲...

IamOkay
今天
3
0
Nmap之防火墙/IDS逃逸

选项 解释 -f 报文分段 --mtu 指定偏移大小 -D IP欺骗 -sI 原地址欺骗 --source-port 源端口欺骗 --data-length 指定发包长度 --randomize-hosts 目标主机随机排序 --spoof-mac Mac地址欺骗 ...

Frost729
今天
2
0
带你搭一个SpringBoot+SpringData JPA的环境

不知道大家对SpringBoot和Spring Data JPA了解多少,如果你已经学过Spring和Hibernate的话,那么SpringBoot和SpringData JPA可以分分钟上手的。 其实我在学完SpringBoot和SpringData JPA了之...

java菜分享
今天
7
0
Chocolatey 在Window搭建一个开发环境

在看了(利用 Chocolatey 快速在 Windows 下搭建一个开发环境)后,准备从零开始 一、准备工作 1、用管理员权限启动:powershell,执行错误请参考(PowerShell因为在此系统中禁止执行脚本的解...

近在咫尺远在天涯
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部