中的主要新特色,正式发表

2019-06-15 22:52 来源:未知

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

随着 Node.js 8.0 版本的发布(5月30日下午12点发布),我们得到了最新的 LTS 版本,具有一系列新功能和性能改进。

Node.js 基金会宣布发布 Node.js v8.0.0。新版主要的特性包括:npm 客户端升级到 5.0.0 版;基于 Chrome JS 引擎 V8 升级到 v5.8;Node.js API (N-API)允许创建原生扩展,编译一次可在多个 Node 版本中使用;更新 async_hooks 模块;完整支持 WHATWG URL API 解析器;Buffer API 引入了大量新变化;新的 util.promisify() API; console 模块加入 console.log() 和 console.error(),等等。Node.js v8 将是下一个长期支持版(LTS)。(文/Solidot)

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

本文我们将介绍 Node.js 8.0 版本中重要的功能和修复。


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

与以前的 Node.js 版本相比,8.0.0相当强大。虽然这其中有些还正在进行,很多正在商榷。但基本上是稳定和可测试的
•James M Snell(@jasnell)2017年5月30日

Node.js v8.0.0 已正式发布。v8.0.0 是下一个主要的版本,带来了一系列重大的变化和新功能,内容十分多,本文包含主要重要的更改和功能的摘要。

下载Node.js 8版本:https://nodejs.org/download/rc/v8.0.0-rc.2/

新版本的代号是 Carbon。Node 8 将从2017年10月起成为现行的 LTS 版本,并将保持到2019年12月31日。这也意味着 Node.js 6.x 版本将在 2018 年 4 月进入维护模式,并在 2019 年 4 月废弃。

韦德娱乐1946网页版 1

Async Hooks API 介绍

你可以在这里获取 8.0 release文档

npm 5.0.0

npm 最近宣布发布了 5.0.0 版本的 npm 客户端,现在在 Node.js 8.0.0 中使用了这个重要的新版本。

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

Async Hooks API 简介

V8 5.8

Node.js 8.0.0 使用了 V8 5.8,这是 JavaScript 运行时的重要更新,其中包括性能方面和面向开发者 API 的重大改进。对 Node.js 开发者来说最重要的是 V8 5.8 保证与 V8 5.9 和即将推出的 V8 6.0 具有 ABI 的向前兼容性,这将有助于确保 Node.js 原生插件生态系统的稳定性。在 Node.js 8 的生命周期中,会计划升级到 5.9 甚至 6.0。

V8 5.8 引擎还有助于设置新的 TurboFan Ignition 编译器管道(compiler pipeline)的转移,这将为所有 Node.js 应用程序提供重要的新的性能优化。虽然 V8 之前的版本已经存在,但 TurboFan 和 Ignition 将在 V8 5.9 中首次默认启用。新的编译器管道代表了这样一个重大变化 —— Node.js 核心技术委员会(CTC)选择推迟最初发布安排在 4 月的 Node.js 8,以便更好地适应它。

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

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

Node.js API (N-API)

对于使用或创建原生插件的 Node.js 开发者,新的实验性的 Node.js API(N-API)对于现有的 Native Abstractions for Node.js (nan) 来说是一个重大的改进,它将允许原生插件在一个系统上编译一次,并在多个版本的 Node.js 上使用。

通过提供一个新的虚拟机不可知的应用程序二进制接口(ABI),原生插件不仅可以在多个版本的 V8 JavaScript 运行时上运行,还可以在微软的 Chakra-Core 运行时上使用。

N-API 在 Node.js 8.0.0 中是实验性的功能。

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

API 可以发送消息通知消费者关于 Node.js 中所有句柄对象的生命周期。它可以解决与continuation-local-storage npm package相同的问题,只不过现在可以在 Node 核心代码中实现。

完全支持 WHATWG URL 解析器

WHATWG URL 标准实现的实验性 URL API 去年已经添加到 Node.js 7.x 中,自那以来一直在积极发展。现在,从 8.0.0 开始,新的 URL 实现现在是 Node.js 中完全支持的非实验性 API。下面展示了一个示例用法,官方文档中提供了更多详细信息。

const URL = require('url').URL; const myUrl = new URL('/a/path', '');

1
2
3
const URL = require('url').URL;
 
const myUrl = new URL('/a/path', 'https://example.org/');

这个新的 URL 实现是最重要的,因为它与现代 Web 浏览器(如 Chrome,Firefox,Edge 和 Safari)中的 URL 实现和 API 相匹配,允许使用 URL 在不同环境之间共享代码。

Async Hooks API 在 Node.js 8 中如何工作

如果您曾经使用过 continuation-local-storage,那么现在有了 async hooks ,目前有一个替代方案--cls-hooked  ,但目前尚未稳定,因此谨慎使用!

长期支持

Node.js v8 是下一个长期支持(LTS)的版本。这将在 2017 年 10 月进入,一旦 Node.js 8 转换到 LTS,将会使用代号 Carbon。

韦德娱乐1946网页版 2

还包括以下更新:

  • 更新 async_hooks 模块
  • Buffer API 引入了大量新变化
  • 新的 util.promisify() API
  •  console 模块加入 console.log() 和 console.error()

更多内容请参阅发布主页、更新日志

下载地址

  • Source code (zip)
  • Source code (tar.gz)

综合:开源中国、Solidot

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

Async Hooks API 如何在 Node.js 8 中工作的?

const asyncHooks = require('async_hooks')
asyncHooks.createHooks({ 
 init,
 pre,
 post,
 destroy
})

createHooks函数可以为每一个异步操作的生命周期注册钩子函数。

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

const asyncHooks = require('async_hooks')

asyncHooks.createHooks({ 
 init,
 pre,
 post,
 destroy
})

N-API 介绍

这些函数将根据处理程序的生命周期事件触发。

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

这里阅读更多Async Hooks的信息,或者这里查看当前的进度。

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

N-API 简介

了解更多N-API信息。

N-API是用于编写原生插件的 API。它独立于底层的 JavaScript 运行环境,但作为 Node.js 本身的一部分进行维护。它的目标是使应用程序二进制接口(ABI)在不同 Node.js 版本之间保持稳定。

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

韦德娱乐1946网页版,N-API的目的是将附加组件与底层JavaScript引擎的更改分开,以便原生组件可以在不同版本的 Node 环境中运行并且不需要重新编译。

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

查看更多N-API的相关信息。

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

Node 8 中 Buffer 安全性的改进

将 V8 升级到 5.8:TurboFan & Ingnition

在 Node.js 8之前,用new Buffer(Number)来创建一个Buffer,并未将内存初始化为0。因此,新的缓冲区实例可能包含敏感信息,导致安全问题。

使用Node.js 8版本,底层的V8 JavaScript引擎也会更新。

虽然这样可以使 Buffer 的创建更快,但对于大多数情况来看,这并不可行。因为从 Node.js 8 开始,使用new Buffer(Number) 或者Buffer(Number) 的将会自动将内存置为0.

对于Node.js用户来说,最大的变化就是引入TurboFan和Ignition。Ignition是V8的解释器,TurboFan是优化编译器。

将V8升级到5.8:为 TurboFan 和Ingnition 做准备

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

使用 Node.js 8,底层的V8 JavaScript引擎也会被更新。

  • Daniel Clifford和V8团队

它给 Node.js 用户带来的最大的变化就是可以在 V8 5.9中引入TurboFan 和 Ignition 。Ignition 是 V8 的解释器,而 TurboFan 是优化编译器。

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

“ Ignition 和 TurboFan 管道已经开发了近3½年。它代表了 V8 团队通过测量现实 JavaScript 性能并仔细考虑了当前语言中的缺点而获得的最终结果。这为我们能够在未来几年内继续优化 JavaScript 奠定了基础。- Daniel Clifford 和 V8 团队

韦德娱乐1946网页版 3

下面是 Node 8 版本之前的 V8 编译管道的示例图

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

韦德娱乐1946网页版 4

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

图片来源:Benedikt Meurer

韦德娱乐1946网页版 5

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

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

这是简化的管道外观,没有 FullCode Generator 和 Crankshaft:

了解更多TurboFan and Ignition和 TurboFan Inlining Heuristics 。

韦德娱乐1946网页版 6

将 npm 升级到 5.0.0

图片来源:Benedikt Meurer

新的Node.js 8版本还附带npm 5 - 最新版本的npm CLI。

这一新管道大大降低了V8团队的技术负担,并且实现了以前不可能实现的大量优化。

新 npm 版本的亮点:

阅读更多关于 TurboFan and Ignition和TurboFan Inlining Heuristics

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

npm 升级到 5.0.0

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

新的 Node.js 8 版本还附带了npm 5 - 最新版本的npm CLI。

Buffer

npm 新版本的亮点:

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

•一种新的标准化锁定文件的功能,用于跨套件管理器兼容性(package-lock.json),一种新的格式和 shrinkwrap 语义化。

Child Process

•--save 不再需要,默认情况下将保存所有安装
•node-gyp 现在支持 Windows(node-gyp.cmd)

  • Argument和Kill信号验证得到改善
  • Child Process方法接受Uint8Array作为输入

•现在将包括sha512和sha1校验。

Console

Node.js 8中的其他显着变化

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

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

Domains

Child Process

Native Promise实例现在是域感知的

•优化参数和 kill 信号校验

文件系统

•Child Process 方法接受 Uint8Array 作为输入

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

Console
•使用 console 发出的错误事件现在被限制

HTTP

Domains
•Native Promise 实例现在是 Domain 敏感的

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

File System

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

•实用工具类fs.SyncWriteStream已被弃用

Stream

•fs.read()字符串接口已被删除

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

HTTP

TLS

•传出的 Cookie 头连接成一个字符串

该rejectUnauthorized选项现在默认为true

•httpResponse.writeHeader()方法已被弃用

URL

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

WHATWG URL的实现,现在是Node.js API完全支持的

TLS
•rejectUnauthorized选项现在默认为true

Node.js 8 下一步要做什么

URL
•WHATWG URL实现现在是完全支持的 Node.js API

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

接下来是 Node.js 8

您可能感兴趣的文章:

  • Node.js v8.0.0正式发布!看看带来了哪些主要新特性
  • Centos6.8下Node.js安装教程
  • 8 行 Node.js 代码实现代理服务器
  • Node.js实现兼容IE789的文件上传进度条
  • windows8.1 iis8.5下安装node.js开发环境
  • Windows8下搭建Node.js开发环境教程
  • shell脚本转发80端口数据包给Node.js服务器

Node.js 8 为我们带来了非常有趣的改进,包括Async Hooks API,它目前较难掌握,文档还在不断改进状态。我们将尽快开始播放新版本,并尽快让您对这些功能的更详细的说明。

您可能感兴趣的文章:

  • Node.js v8.0.0正式发布!看看带来了哪些主要新特性
TAG标签: 韦德娱乐1946
版权声明:本文由韦德娱乐1946_韦德娱乐1946网页版|韦德国际1946官网发布于韦德娱乐1946网页版,转载请注明出处:中的主要新特色,正式发表