NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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:504015
用户头像

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

关注

评论

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

HarmonyOS(鸿蒙)——滑动事件

李子捌

28天写作 21天挑战 12月日更

利用 Github Pages 和 Hugo 快速搭建免费的个人网站

xcbeyond

GitHub Pages Hugo 28天写作 12月日更

【CSS 学习总结】第六篇 - CSS 布局概述

Brave

CSS 12月日更

盘点 2021|海军的 2021年终总结, 跳槽后,我收获了什么

程序员海军

年终总结 2021年度技术盘点与展望

大公司生存的几把斧

圣迪

人才 组织 战略 大公司 技术委员会

前端开发:自定义时间轴的使用

三掌柜

28t 28天写作 12月日更

结束了(26/28)

赵新龙

28天写作

Tinder系统架构

俞凡

架构 大厂实践 Tinder

代码实验01:main 方法可以继承吗?

Seven的代码实验室

阿里二面 main方法

架构实战营模块七作业

spark99

架构实战营

架构实战训练营-模块4-作业

温安适

「架构实战营」

重载(overload) 和重写(override) 的区别?重载的方法能否根据返回类型进行区分?

海拥(haiyong.site)

28天写作 12月日更

.NET6新东西---TryGetNonEnumeratedCount

喵叔

28天写作 12月日更

写博客的感想

为自己带盐

28天写作 12月日更

GraphQL与REST:两种API架构

devpoint

graphql REST API 12月日更

没事-2022继续做梦

将军-技术演讲力教练

我在《Effective STL》中的找到的知识点

SkyFire

c++ stl

画饼,是领导者的基本技能

搬砖的周狮傅

管理 管理经

跟着动画学 Go 数据结构之Go 实现栈

宇宙之一粟

Go 语言 12月日更

Docker Rootless 在非特权模式下运行 Docker

Se7en

介绍一些拉新的具体方案

石云升

AARRR 28天写作 产品增长 12月日更

Dubbo 框架学习笔记十三

风翱

dubbo 12月日更

56 K8S之Kubernetes监控

穿过生命散发芬芳

k8s 28天写作 12月日更

Timsort - 混合、稳定、高效的排序算法

ue4

算法 排序 插入排序 归并排序 Timosrt

如何命名指标和标签

耳东@Erdong

Prometheus label Metric Naming

25《重学JAVA》--多线程(二)

杨鹏Geek

Java25周年 28天写作 12月日更

Springboot国际化消息和源码解读

DoneSpeak

Java spring springboot

模块三作业

浮生若梦

「架构实战营」

人生的意义要不断探索实现

mtfelix

28天写作

发射、加速与着陆:一群科学家的奥林帕斯探索之旅

脑极体

追热点

张老蔫

28天写作

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