当前位置: 移动技术网 > IT编程>开发语言>JavaScript > 全面解析Node.js 8 重要功能和修复

全面解析Node.js 8 重要功能和修复

2017年12月12日  | 移动技术网IT编程  | 我要评论
5月30日12点,node.js 8正式发布了,这个版本具有一系列新功能和性能改进,并且这些功能和改进将获得长期支持(lts)。 下面就来介绍node.js 8版本中最重

5月30日12点,node.js 8正式发布了,这个版本具有一系列新功能和性能改进,并且这些功能和改进将获得长期支持(lts)。

下面就来介绍node.js 8版本中最重要的功能和修复。

新版本的代号是carbon。node.js 8将从2017年10月起,正式成为当前的lts版本,并持续到2019年12月31日。这也意味着node.js 6版本将在2018年4月进入到维护模式,并在2019年4月结束维护支持。

下载node.js 8版本:

async hooks api 介绍

async hooks (以前称为asyncwrap) api允许获取有关句柄对象生命周期的结构跟踪信息。

api发出的消息会将node.js中所有句柄对象的生命周期告知给consumer。它试图解决类似于这样的问题。

如果你正在使用continuation-local-storage,那么已经可以用称为的async hooks来代替使用了 – 只是目前并不是使用async hooks的最好时机,所以需要谨慎使用!

async hooks api 在 node.js 8 中如何工作

createhooks函数的注册功能会被每一个异步操作的不同生命周期事件调用。

const asynchooks = require('async_hooks')
asynchooks.createhooks({ 
 init,
 pre,
 post,
 destroy
})

了解更多async hooks,或查看正在进行的工作文档。这些函数将会根据处理程序对象的生命周期事件选择性触发。

n-api 介绍

n-api是用于构建原生插件的api。它独立于底层javascript运行时,并作为node.js自身的一部分进行维护。这么做的目的是保证应用程序二进制接口(abi)在不同node.js版本之间能够保持稳定。

n-api的目的是将附加组件和基础javascript引擎中的更改区分开,以便原生插件在不需要重新编译情况下,就可以运行不同的node.js版本。

了解更多n-api信息。

node.js 8 中的缓冲区安全性改进

在node.js 8版本之前,使用new buffer(number)构造函数分配的缓冲区并未使用zeros初始化内存空间。结果导致新的buffer实例可能包含敏感信息,容易导致安全问题。

虽然这是一个用于提高创建新buffer性能的决定,但是对大多数人来说,并不打算这么使用。因此从node.js 8开始,使用new buffer(number)或buffer(number)分配的buffers会被zeros自动填充。

将 v8 升级到 5.8:turbofan & ingnition

使用node.js 8版本,底层的v8 javascript引擎也会更新。

对于node.js用户来说,最大的变化就是引入turbofan和ignition。ignition是v8的解释器,turbofan是优化编译器。

“ignition和turbofan的联合使用已经开发了近3½年,它代表了v8团队集体认识的最终结果,是v8团队收集了javascript的实测性能并仔细分析了full-codegen的缺点和crankshaft的结果。这也是能够在未来几年内继续优化javascript语言体系的基础。“ - daniel clifford和v8团队

目前v8的编译管道如下图所示。

这个管道的最大问题是,新的语言功能必须在管道的不同部分实现,这就增加了大量额外的开发工作。

下面是简化的管道,没有了fullcode generator和crankshaft:

新管道大大降低了v8团队的技术负担,并实现了很多之前无法实现的改进。

了解更多和 turbofan inlining heuristics 。

将 npm 升级到 5.0.0

新的node.js 8版本还附带npm 5 - 最新版本的npm cli。

新 npm 版本的亮点:

  • 一种新的标准化的锁定文件功能,用于跨包管理器的兼容性(package-lock.json),以及一种用于shrinkwrap的新格式和语义
  • --save 已经不再需要了,因为所有的安装将默认保存
  • node-gyp现在支持windows的node-gyp.cmd
  • 新的发布版本将会包括sha512和sha1校验

node.js 8 版本中的其它显著改变

buffer

buffer方法现在接受uint8array作为输入

child process

  • argument和kill信号验证得到改善
  • child process方法接受uint8array作为输入

console

使用控制台方法时,错误事件发送现在受到了抑制

domains

native promise实例现在是域感知的

文件系统

  • 实用程序类fs.syncwritestream已被弃用
  • 已弃用的fs.read( )字符串接口已被删除

http

溢出的cookie headers会被连接成一个字符串

该httpresponse.writeheader( )方法已被弃用

stream

stream现在支持destroy( )和_destroy( ) api

tls

该rejectunauthorized选项现在默认为true

url

whatwg url的实现,现在是node.js api完全支持的

node.js 8 下一步要做什么

node.js 8版本令我们兴奋,因为它包含了很多有趣的提升,例如async hooks api,这些api在当前的文档状态是很难掌握的。我们将尽快开始使用新版本,并尽快提供给用户新功能的更详细说明。

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网