配色: 字号:
Node.js 8有哪些重要功能和修复?
2017-06-05 | 阅:  转:  |  分享 
  




Node.js8有哪些重要功能和修复?



欢迎大家持续关注葡萄城控件技术团队博客,更多更好的原创文章尽在这里~~





5月30日12点,Node.js8正式发布了,这个版本具有一系列新功能和性能改

进,并且这些功能和改进将获得长期支持(LTS)。

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

新版本的代号是Carbon。Node.js8将从2017年10月起,正式成为当前的

LTS版本,并持续到2019年12月31日。这也意味着Node.js6版本将在2018

年4月进入到维护模式,并在2019年4月结束维护支持。







AsyncHooksAPI介绍

AsyncHooks(以前称为AsyncWrap)API允许获取有关句柄对象生命周期

的结构跟踪信息。

API发出的消息会将Node.js中所有句柄对象的生命周期告知给consumer。它

试图解决类似于continuation-local-storagenpmpackage这样的问题。

如果你正在使用continuation-local-storage,那么已经可以用称为cls-hook

的asynchooks来代替使用了–只是目前并不是使用asynchooks的最好时

机,所以需要谨慎使用!



AsyncHooksAPI在Node.js8中如何工作

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

constasyncHooks=require(''async_hooks'')

asyncHooks.createHooks({

init,

pre,

post,

destroy

})



了解更多AsyncHooks,或查看正在进行的工作文档。这些函数将会根据处理

程序对象的生命周期事件选择性触发。







N-API介绍

N-API是用于构建原生插件的API。它独立于底层JavaScript运行时,并作为

Node.js自身的一部分进行维护。这么做的目的是保证应用程序二进制接口(ABI)

在不同Node.js版本之间能够保持稳定。

N-API的目的是将附加组件和基础JavaScript引擎中的更改区分开,以便原生

插件在不需要重新编译情况下,就可以运行不同的Node.js版本。

了解更多N-API信息。



Node.js8中的缓冲区安全性改进

在Node.js8版本之前,使用newBuffer(Number)构造函数分配的缓冲区并未

使用ZEROS初始化内存空间。结果导致新的Buffer实例可能包含敏感信息,容

易导致安全问题。

虽然这是一个用于提高创建新Buffer性能的决定,但是对大多数人来说,并不

打算这么使用。因此从Node.js8开始,使用newBuffer(Number)或

Buffer(Number)分配的Buffers会被ZEROS自动填充。



将V8升级到5.8:TurboFan&Ingnition

使用Node.js8版本,底层的V8JavaScript引擎也会更新。

对于Node.js用户来说,最大的变化就是引入TurboFan和Ignition。Ignition





是V8的解释器,TurboFan是优化编译器。

“Ignition和TurboFan的联合使用已经开发了近3?年,它代表了V8团队集

体认识的最终结果,是V8团队收集了JavaScript的实测性能并仔细分析了Full-

codegen的缺点和Crankshaft的结果。这也是能够在未来几年内继续优化

JavaScript语言体系的基础。“-DanielClifford和V8团队

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



这个管道的最大问题是,新的语言功能必须在管道的不同部分实现,这就增加了

大量额外的开发工作。

下面是简化的管道,没有了FullCodeGenerator和Crankshaft:









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

了解更多TurboFanandIgnition和TurboFanInliningHeuristics。



将npm升级到5.0.0

新的Node.js8版本还附带npm5-最新版本的npmCLI。

新npm版本的亮点:

?一种新的标准化的锁定文件功能,用于跨包管理器的兼容性(package-

lock.json),以及一种用于shrinkwrap的新格式和语义

?--save已经不再需要了,因为所有的安装将默认保存

?node-gyp现在支持Windows的node-gyp.cmd

?新的发布版本将会包括sha512和sha1校验



Node.js8版本中的其它显著改变

Buffer

Buffer方法现在接受Uint8Array作为输入

ChildProcess

?Argument和Kill信号验证得到改善

?ChildProcess方法接受Uint8Array作为输入





Console

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

Domains

NativePromise实例现在是域感知的

文件系统

?实用程序类fs.SyncWriteStream已被弃用

?已弃用的fs.read()字符串接口已被删除

HTTP

?溢出的Cookieheaders会被连接成一个字符串

?该httpResponse.writeHeader()方法已被弃用

Stream

Stream现在支持destroy()和_destroy()API

TLS

该rejectUnauthorized选项现在默认为true

URL

WHATWGURL的实现,现在是Node.jsAPI完全支持的









Node.js8下一步要做什么

Node.js8版本令我们兴奋,因为它包含了很多有趣的提升,例如AsyncHooks

API,这些API在当前的文档状态是很难掌握的。我们将尽快开始使用新版本,

并尽快提供给用户新功能的更详细说明。



本文是由葡萄城控件技术开发团队发布,转载请注明出处:葡萄城控件

了解更多开发工具和技巧,请前往葡萄城控件官网

了解企业级报表和Web应用,请前往葡萄城企业软件网站



献花(0)
+1
(本文系zenmshuo首藏)