[Node.js大事记]V4.0版本正式发布 V8引擎更新至V4.5 ES6新特性试用

 2015年09月09日    82     声明


Node.js V4.0 正式版在今天正式发布并可以下载了,这也是第一个io.js 和 Node.js 的合并版本,目前最新的版本号是V4.0.0。在Node.js V4.0中,V8引擎更新到了V4.5版,可以支持大多数 ECMAScript 6 新特性。在Node.js 4.0 将引入 LTS(Long Term Support,长期支持版本) 长期支持计划的发行周期,首个LTS版本将于10月份发布,以后每6个月将发布一个主要的稳定版本(4月份一个,10月份一个,类似Ubuntu)。


1. 时间轴

Node.js V4.0做为第一个io.js 和 Node.js 的合并版本,可以说非常重大的一次更新。二者经历了io.js从node.js分离,做为单到的运行版本,再到今天的合并,经历了在互联网中不短的一段时间。

  • 2014年12月,多位重量级Node.js开发者不满Joyent对Node.js的管理,自立门户创建了io.js
  • 2015年1月,io.js发布了1.0版本,并且很快就达到了2.0版本,同时其社区也非常活跃
  • 2015年2月,Joyent 在 Node Summit 宣布成立 Node.js基金会
  • 2015年3月,Node.js基金会章程草案在不断完善传播
  • 2015年5月,io.js TC 投票加入 Node.js 基金会并合并到 Node.js
  • 2015年6月,Node.js 基金会正式启动
  • 2015年7月,Node.js 基金会董事会成立
  • 2015年8月,第一次 Node.js Collaborator Summit
  • 2015年9月,Node.js V4.0做为第一个 io.js 和 Node.js 的合并版本发布


2. Node.js V4.0主要更新

  • child_processChildProcess.prototype.send()process.send()跨平台的异步操作作为一个可选的回调参数,可在消息发送时候调用。例如 .send(message[, sendHandle][, callback])#2620 (Ben Noordhuis)
  • node:将io.js代码重命名为Node.js#2367(cjihrig)
  • node-gyp:绑定了一个更新版的 node-gyp 支持所有版本的 Node 和 IO.js。 #2700 (Rod Vagg)
  • npm:版本从 2.13.3 更新到 2.14.2,包含一个安全更新,详情请看:npm/releases/tag/v2.14.2 (Kat Marchán) #2696
  • timers:提示定时器的性能,和一些小bug修复#2540(Jeremiah Senkpiel),nodejs/node-v0.x-archive#8751(Julien Gilli),nodejs/node-v0.x-archive#8905(Julien Gilli)
  • utilutil.is*()函数被废弃,文档中已经注明废弃。建议用户寻找更可靠的替代方案:#2447 (Sakthipriyan Vairamani)
  • v8:版本从 4.4.63.30 升级到 4.5.103.30 #2632 (Ali Ijaz Sheikh)
    • 实现新的 TypedArray 原型方法: copyWithin(), every(), fill(), filter(), find(), findIndex(), forEach(), indexOf(), join(), lastIndexOf(), map(), reduce(), reduceRight(), reverse(), slice(), some(), sort()。详细请看:TypedArray
    • 实现新的 TypedArray.from()TypedArray.of() 函数。详细请看:TypedArray
    • 实现了 arrow 函数。详细请看:Arrow_functions
    • 完整更新记录请看:ChangeLog


3. ES6新特性试用

Generator函数

Generator函数是ECMAScript 6中新增的特性,依靠Generator函数,可以有效解决JavaScript异步编程中的回调嵌套问题,详细请看:ECMAScript 6中的Generator函数Generator函数在Node.js V4.0已经得到了很好的支持:

function * myGenerator() {
    yield '状态1';
    yield '状态2';
    return '状态3';
}

var my = myGenerator();

console.log(my.next());	    //{ value: '状态1', done: false }
console.log(my.next());	    //{ value: '状态2', done: false }
console.log(my.next());	    //{ value: '状态3', done: true }

Promise对象

Promise对象ECMAScript 6中的原生对象,利用Promise对象,我们可以将深度嵌套的回调函数变为顺序执行,并且可以统一的进行错误处理,详细请看:ECMAScript 6 Promise对象学习之Promise简介。在Node.js V4.0已经也已经原生支持Promise对象:

var http = require('http');

function getURL(URL) {
    return new Promise(function (resolve, reject) {
        http.get(URL, function(res) {
    	    resolve(res);
	}).on('error', function(e) {
	    reject(new Error(e));
	});
    });
}
var itbilu = getURL('http://itbilu.com');
var yijiebuyi = getURL('http://yijiebuyi.com');

itbilu.then(function(result){
    console.log('itbilu status:', result.statusCode);
    yijiebuyi.then(function(result){
	console.log('yijiebuyi status:', result.statusCode);
    }).catch(function(err){
	console.log(err);
    })
}).catch(function(err){
    console.log(err);
})

//itbilu status: 200
//yijiebuyi status: 200