记录黑客技术中优秀的内容, 传播黑客文化,分享黑客技术精华

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

2017-06-03 07:00

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

\

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

Async Hooks API 介绍

Async Hooks (以前称为 AsyncWrap) API 允许获取有关句柄对象生命周期的结构跟踪信息。

API 发出的消息会将 Node.js 中所有句柄对象的生命周期告知给 consumer。它试图解决类似于 continuation-local-storage npm package 这样的问题。

如果你正在使用 continuation-local-storage,那么已经可以用称为 cls-hook 的 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 and Ignition 和 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 在当前的文档状态是很难掌握的。我们将尽快开始使用新版本,并尽快提供给用户新功能的更详细说明。

在众多支持 node.js 的产品中,值得一提的是 Wijmo,这是一款为企业应用程序开发而推出的一系列包含 HTML5 和 JavaScript 的开发控件集。无论你的应用程序是移动端、PC 端、还是必须要支持 IE6,Wijmo Enterprise 均能满足需求。


知识来源: www.2cto.com/article/201706/643275.html

阅读:96752 | 评论:0 | 标签:无

想收藏或者和大家分享这篇好文章→复制链接地址

“Node.js 8有哪些重要功能和修复?”共有0条留言

发表评论

姓名:

邮箱:

网址:

验证码:

公告

关注公众号hackdig,学习最新黑客技术

推广

工具

随机推荐

标签云

本页关键词