精华 【整理】Node.js v7.6 发布说明
发布于 3 年前 作者 i5ting 4619 次浏览 来自 分享

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:
    • 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)异步流程控制》

性能提升

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

堆大小比较结果

heap.png

zone memory比较结果

zone.png

据菜神@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未来发展会越来越好

asyncimprovements.png

详见

最后加个广告,欢迎参加

Screen Shot 2017-02-24 at 12.11.16.png

7 回复

狼叔,等你的新片!

Screen Shot 2017-02-23 at 9.34.14 AM.png

这篇文章非常受欢迎,12个小时内突破3200阅读量,可见大家对async函数的关注度有多高~大家普遍看涨,哈哈

Node.js 7.7 发布了,没有大变动 This release contains a deprecation warning for node --debug

支持狼叔。大家确实很关系 async await.

狼叔每次都是精华啊

回到顶部