Node.js v7.6 发布说明
要点
- 集成v8 5.5版本
- 支持async函数,再也不用加flag才能运行了
- 性能提升,尤其是内存
- 在v8 5.7对async函数的优化会有4倍以上的提高
Node.js v7.6发布说明
https://github.com/nodejs/node/blob/master/doc/changelogs/CHANGELOG_V7.md#7.6.0
This release contains v8 5.5
最重要的一条就是它包含了v8 5.5版本,也就是说v8 5.5支持的async函数和性能优化,在Node.js平台上可以受益。
其他内容,变化不大
- deps:
- lib: build
node inspect
intonode
(Anna Henningsen) #10187 - crypto: Remove expired certs from CNNIC whitelist (Shigeki Ohtsu) #9469
- inspector: add --inspect-brk (Josh Gavant) #11149
- fs: allow WHATWG URL objects as paths (James M Snell) #10739
- src: support UTF-8 in compiled-in JS source files (Ben Noordhuis) #11129
- url: extend url.format to support WHATWG URL (James M Snell) #10857
v8 5.5版本
其实v8 5.5版本在去年10月份就发布了,只是Node.js一直没有升级上去,终于在Node.js v7.6里落地了,对于期望async函数和Koa 2.0正式版本的网友来说是件大事儿。
Async 函数
在v5.5版本中, V8 搭载了 JavaScript ES2017 里的async 函数, 它让编写和创建Promise更加简单。 使用async函数, 可以通过输入await关键字来等待Promise的resolve,并且如果返回值是可以同步的就会直接赋值-不在需要callback了。可以翻墙看看这篇介绍async函数的文章
下面给出一个例子,通过fetch一个URL返回response文本,这是一个典型的异步的,基于Promise风格的写法。
function logFetch(url) {
return fetch(url)
.then(response => response.text())
.then(text => {
console.log(text);
}).catch(err => {
console.error('fetch failed', err);
});
}
下面给出使用async函数重写的代码,移除了callback:
async function logFetch(url) {
try {
const response = await fetch(url);
console.log(await response.text());
} catch (err) {
console.log('fetch failed', err);
}
}
如果对Node.js异步流程不熟悉,可以看看《深入浅出js(Node.js)异步流程控制》
性能提升
V8 5.5 说明了在内存上提升的几个关键点。
内存消耗是JavaScript虚拟机性能衡量中的一个重要的维度,过去的几个发布中,V8小组通过分析并且为很多被认为是现代web开发模式代表的网站显著的减少了内存。V8 5.5 在内存较小的设备上减少的Chrome内存全部消耗多支35%(说明:和Chrome 53里的 V8 5.3比较的), 较少主要是在V8堆大小和zone memory上使用。其他设备部分也得益于zone memory减少。具体翻墙请看http://v8project.blogspot.jp/2016/10/fall-cleaning-optimizing-v8-memory.html
堆大小比较结果
zone memory比较结果
据菜神@fundon说
- v7.6 v8 做了挺多优化的,try-catch 的 disabled optimization 标记都没有了
- 像这种。[disabled optimization for 0xbac086743c9 <SharedFunctionInfo resolvePromise>, reason: TryCatchStatement]
- 配了台 hackintosh,i7 7700k,测试跑分刚刚的,以前一个 npm test 要 7s,现在 1s
展望一下
然而v8在2017年2月份已经发布5.7了, async/await 能有个4倍左右的提升,V8团队还是非常给力的。毫无疑问,在性能和生态环境上都非常棒,Node.js未来发展会越来越好
详见
- https://v8project.blogspot.sg/2017/02/v8-release-57.html
- https://v8project.blogspot.sg/2016/10/fall-cleaning-optimizing-v8-memory.html
- https://v8project.blogspot.sg/2017/02/one-small-step-for-chrome-one-giant.html
最后加个广告,欢迎参加