Node.js v7.6 发布要点说明

2017-02-24 i5ting Node全栈 Node全栈

Node.js v7.6 发布说明

要点

  • 集成v8 5.5版本

  • 支持async函数,再也不用加flag才能运行了

  • 性能提升,尤其是内存,最多35%的提升

  • 在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:

    • update V8 to 5.5 (Michaël Zasso) #11029

    • upgrade libuv to 1.11.0 (cjihrig) #11094

    • add node-inspect 1.10.4 (Jan Krems) #10187

    • upgrade zlib to 1.2.11 (Sam Roberts) #10980

  • lib: build node inspect into node (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)异步流程控制》https://github.com/i5ting/asynchronous-flow-control

性能提升

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未来发展会越来越好

详见

如果想深入沟通,获取最新消息,欢迎参加狼叔的小密圈

如果想参与评论,请点击阅读原文链接,进入国内最专业的cnode论坛

你身边如果有朋友对Node.js或全栈感兴趣,可以转发给他们看看哦,O(∩_∩)O先谢过