写点什么

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

2017 年 6 月 01 日

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 年 6 月 01 日 18:503650
用户头像

发布了 321 篇内容, 共 110.0 次阅读, 收获喜欢 109 次。

关注

评论

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

2021年爆锤39K月薪Offer!阿里巴巴Java面试(知识点)整理

Java架构之路

Java 程序员 架构 面试 编程语言

【最新】2021年Hive阶段最全面试真题-附答案

大数据技术指南

大数据 hive 28天写作 3月日更 大数据面试题

区块链与隐私计算保护数据产权,让个人隐私不再“裸奔”

CECBC区块链专委会

区块链

推荐一款小众且好用的 Python 爬虫库

星安果

Python 爬虫 RoboBrowser

第六.产品经理的项目管理

让我思考一会儿

Flink SQL CDC 实践以及一致性分析

Apache Flink

flink

【2021 ECUG Con】聚势而来,与你相约花开时

小剑客

区块链 云计算 大数据 开源 go语言

一周信创舆情观察(3.1~3.7)

统小信uos

大作业

yoki

内推阿里Java技术岗4面:JVM+回收算法+并发编程+NIO/BIO+开源框架+索引+Redis缓存等

Java成神之路

Java 程序员 架构 面试 编程语言

如何用一个月的时间啃完英语词典?

wbliu85

COPU助力北大研究生开源公选课丨开源PostgreSQL研发课程成功进入北京大学

PostgreSQLChina

数据库 postgresql 开源 开源社区

话说 类加载过程 第一篇

木子的昼夜

KubeNode:阿里巴巴云原生 容器基础设施运维实践

阿里巴巴云原生

阿里巴巴 容器 运维 云原生 k8s

前端开发:VS Code编辑器新建Vue文件自定义模板的方法

三掌柜

vue.js 前端 3月日更

外卖下单用例流程图

阿珍爱上阿强

如何与下属沟通?

石云升

程序员成长 28天写作 职场经验 管理经验 3月日更

Elasticsearch Inverted Index

escray

elastic 28天写作 死磕Elasticsearch 60天通过Elastic认证考试 3月日更

终于学完国内算法第一人10年经验总结的数据结构与算法详解文档

Java架构之路

Java 程序员 架构 面试 编程语言

云算力矿池挖矿系统开发技术

薇電13O25249123

有钱人为什么配置加密货币?

CECBC区块链专委会

货币

[TcaplusDB知识库]键值型数据库TcaplusDB是如何进行数据读写的?

TcaplusDB

数据库 nosql 后端 TcaplusDB Tcaplus

git 教程 --git revert 命令

生之欢愉,时间同行

源码分析-Netty:开篇

程序员架构进阶

架构 源码分析 Netty 28天写作 3月日更

神了!终于有人把困扰我多年的Spring Boot讲明白了

云流

架构 微服务 框架

数据湖到底是什么?有什么用?这篇文章告诉你

关二爷大数据笔记

数据湖 实时数仓 关二爷大数据笔记

寻找被遗忘的勇气(十一)

Changing Lin

3月日更

新的RBAC:基于资源的权限管理(Resource-Based Access Control)

龙归科技

资源 权限管理 rbac

Flink的状态编程和容错机制

五分钟学大数据

大数据 flink 28天写作 3月日更

数字经济时代,区块链能否担当产业数字化转型核心赋能者?

CECBC区块链专委会

数字经济

最新蚂蚁五面、拼多多三面、字节四面(已入职拼多多),个人面经分享

Java架构之路

Java 程序员 架构 面试 编程语言

2021年全国大学生计算机系统能力大赛操作系统设计赛 技术报告会

2021年全国大学生计算机系统能力大赛操作系统设计赛 技术报告会

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