写点什么

Node.js v8.0.0 带来了哪些主要新特性

  • 2017-06-01
  • 本文字数:1190 字

    阅读完需:约 4 分钟

Node.js 于 5 月 30 号在其官方博客上发布了 Node.js v8.0.0 。这一版本将成为当前的长期维护版本,从 2017 年 10 月开始到 2019 年 12 月 31 号。而 Node.js v6.0.0 将会在 2018 年 4 月进入维护模式,并于 2019 年 4 月结束。

最新发布的版本代号为 Carbon,带来了很多重要的特性改进和一些全新的特性。

引入 async_hooks 模块

新引入实验性模块 async_hooks(之前叫作 async_wrap),它包含了一组用于诊断的 API,开发人员可以用它监控 Node.js 事件循环里的各种操作,跟踪句柄对象全生命周期的事件。可以通过该模块的 createHooks 方法注册用于处理句柄对象生命周期各个阶段事件的函数。

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

更多关于这个新模块的内容可以查看文档和它的开发进度情况。

引入N-API

Node.js API(N-API)为开发人员提供了一组新的实验性 API,用于开发原生插件。它独立于底层的 JavaScript 运行时,并作为 Node.js 的一部分进行维护。引入 N-API 的主要目的是提供一套与虚拟机无关的应用二进制接口(ABA),这样插件只要编译一次就可以运行在各种版本的 Node.js 上,甚至包括来自其他公司的虚拟机,比如微软的 Chakra Core。

N-API 也是一个实验特性,更多有关 N-API 的信息可以参考官方文档。开发人员现在就可以使用这套API,并可以提供反馈以便更好地改进API。

Buffer 安全性的改进

在 v8.0.0 之前,Buffer 是通过 new Buffer(num) 方法来分配的,并没有使用零值来初始化内存空间,新建的 Buffer 对象可能包含敏感数据,会导致安全问题。

不过,使用 Buffer(num) 构造函数创建出来的对象对性能有一点影响,如果开发人员更加看重性能,那么可以使用 Buffer.allocUnsafe(num) 来创建一个未初始化内存的对象。

复制代码
// 使用零值初始化过的对象
const safeBuffer1 = Buffer.alloc(10);
const safeBuffer2 = new Buffer(10);
// 未初始化的对象
const unsafeBuffer = Buffer.allocUnsafe(10);

升级 V8 引擎到 5.8 版本

升级 V8 引擎带来了更好的性能和更多面向开发人员的 API。V8 5.8 可以保证 ABA 兼容 5.9 和即将到来的 6.0,从而确保 Node.js 原生插件的稳定性。后续还会逐步将引擎升级到 5.9 和 6.0。

升级引擎还意味着新的编译器管道——TurboFan 和 Ignition。Ignition 是 V8 引擎的解释器,TurboFan 是优化编译器,虽然它们在之前就已存在,但把它们作为默认的组合还是首次(将在 V8 5.9 里实现)。这是一个重大的转变,将为性能带来极大的提升。

升级 npm 到 5.0.0

Node.js v8.0.0 包含了最新的 npm 5.0.0,其主要特性如下。

  • 新的标准化文件锁机制。
  • 不再需要–save,所有的安装都是默认保存的。
  • node-gyp 现在支持 Windows。
  • 新的发布包含 SHA512 和 SHA1 校验和检查。

更多有关 npm 5.0.0 的新特性可以参考npm 的文档

Node.js v8.0.0 还包括子进程、控制台、文件系统、流、HTTP、TLS、URL 等方面的改进。

2017-06-01 18:504536
用户头像

发布了 322 篇内容, 共 156.4 次阅读, 收获喜欢 148 次。

关注

评论

发布
暂无评论
发现更多内容

nodejs实现jwt

coder2028

node.js

Zebec 以 Layer2 的形式推出 Zebec Chain,流支付新时达来临了

西柚子

ZooKeeper数据模型

穿过生命散发芬芳

zookeeper 10月月更

挑战 30 天学完 Python:Day6 数据类型 - 元组tuple

MegaQi

Python 挑战30天学完Python 10月月更

2022-10-18:以下go语言代码输出什么?A:panic;B:编译错误;C:moonfdd1。 package main import ( “fmt“ “net/url“ ) // 其中

福大大架构师每日一题

golang 福大大 选择题

你用Go写过中间件吗?带你用Go实现【操作日志中间件】

王中阳Go

golang 高效工作 学习方法 #go 10月月更

All Eyes on Docs! 练就火眼金睛,就来StarRocks 极客营

StarRocks

数据库

日志管理与分析系统的基本功能

阿泽🧸

日志管理 10月月更

画一个冰糖葫芦祝大家甜甜蜜蜜

急需上岸的小谢

10月月更

如何通过cmd怎么打开计算机管理

Appleex

windows cmd

Linux中的目录结构是什么样的?有人说像“树”,你觉得呢

wljslmz

Linux 10月月更 目录结构

Go 语言入门很简单:Go 语言的错误处理

宇宙之一粟

异常处理 错误处理 Go 语言 10月月更

Java多线程 线程池的生命周期及运行状态

Yeats_Liao

后端 Java core 10月月更

Java注解

急需上岸的小谢

10月月更

java部分基础总结

Studying_swz

java 编程 10月月更

Go基础数据类型使用实战:int float bool

王中阳Go

Go golang 学习方法 golang 面试 10月月更

leetcode 380. Insert Delete GetRandom O(1) O(1) 时间插入、删除和获取随机元素 (中等)

okokabcd

LeetCode 数据结构与算法

如何实现多个Git仓库同步

Appleex

git

你的公司需要数据中台吗?

久歌

架构

Go slice切片详解和实战:make append copy

王中阳Go

Go golang 学习方法 #go 10月月更

Vue组件入门(八)v-model + 自定义参数

Augus

Vue 3 10月月更

翟佳:StreamNative 组织构建之路丨声网开发者创业讲堂 • 第 5 期

声网

技术管理 人工智能’

抢滩东南亚,融云IM助力应用抓住经济转型红利

融云 RongCloud

互联网 数字化 IM

从AI作画到AI做视频,这一跳改变了什么?

脑极体

JDBC学习

Studying_swz

后端 10月月更

Java多线程 关闭线程池 shutdown() 、shutdownNow()、awaitTermination()

Yeats_Liao

后端 Java core 10月月更

改变线程状态的方法

急需上岸的小谢

10月月更

JavaWeb(一)

Studying_swz

后端 10月月更

深聊Nodejs模块化

coder2028

node.js

高效能敏捷交付团队反思:特性团队(FeatureTeam)+Scrum

laofo

DevOps 敏捷 研发效能 持续交付 敏捷研发

Node.js v8.0.0 带来了哪些主要新特性_架构/框架_薛命灯_InfoQ精选文章