全面解析Node.js 8 重要功能和修复


Posted in Javascript onJune 02, 2017

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

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

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

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

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的编译管道如下图所示。

全面解析Node.js 8 重要功能和修复

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

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

全面解析Node.js 8 重要功能和修复

新管道大大降低了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在当前的文档状态是很难掌握的。我们将尽快开始使用新版本,并尽快提供给用户新功能的更详细说明。

Javascript 相关文章推荐
Prototype Selector对象学习
Jul 23 Javascript
JQuery+CSS提示框实现思路及代码(纯手工打造)
May 07 Javascript
不用一句js代码初始化组件
Jan 27 Javascript
Javascript 实现全屏滚动实例代码
Dec 31 Javascript
基于javascript的异步编程实例详解
Apr 10 Javascript
Vue实现typeahead组件功能(非常靠谱)
Aug 26 Javascript
推荐VSCode 上特别好用的 Vue 插件之vetur
Sep 14 Javascript
浅谈Angularjs中不同类型的双向数据绑定
Jul 16 Javascript
详解vue中axios请求的封装
Apr 08 Javascript
微信小程序实现导航栏和内容上下联动功能代码
Jun 29 Javascript
vue 实现根据data中的属性值来设置不同的样式
Aug 04 Javascript
Element el-button 按钮组件的使用详解
Feb 01 Javascript
vue 中自定义指令改变data中的值
Jun 02 #Javascript
Jquery EasyUI $.Parser
Jun 02 #jQuery
BootStrap 动态表单效果
Jun 02 #Javascript
socket.io与pm2(cluster)集群搭配的解决方案
Jun 02 #Javascript
angularjs定时任务的设置与清除示例
Jun 02 #Javascript
Node.js v8.0.0正式发布!看看带来了哪些主要新特性
Jun 02 #Javascript
详解在AngularJS的controller外部直接获取$scope
Jun 02 #Javascript
You might like
php 带逗号千位符数字的处理方法
2012/01/10 PHP
php获得用户ip地址的比较不错的方法
2014/02/08 PHP
PHP中date与gmdate的区别及默认时区设置
2014/05/12 PHP
PHP实现文件上传与下载实例与总结
2016/03/13 PHP
php ZipArchive实现多文件打包下载实例
2019/10/31 PHP
表单提交验证类
2006/07/14 Javascript
Jquery + Ajax调用webService实例代码(asp.net)
2010/08/27 Javascript
jquery应该如何来设置改变按钮input的onclick事件
2012/12/10 Javascript
JS遍历数组和对象的区别及递归遍历对象、数组、属性的方法详解
2016/06/14 Javascript
JS与HTML结合使用marquee标签实现无缝滚动效果代码
2016/07/05 Javascript
jquery Ajax 全局调用封装实例详解
2017/01/16 Javascript
简易Vue评论框架的实现(父组件的实现)
2018/01/08 Javascript
基于Vue 实现一个中规中矩loading组件
2019/04/03 Javascript
微信小程序 冒泡事件原理解析
2019/09/27 Javascript
[42:22]DOTA2上海特级锦标赛C组小组赛#1 OG VS Archon第一局
2016/02/27 DOTA
[01:01:22]VGJ.S vs OG 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
python定时采集摄像头图像上传ftp服务器功能实现
2013/12/23 Python
在Python的Django框架中显示对象子集的方法
2015/07/21 Python
win系统下为Python3.5安装flask-mongoengine 库
2016/12/20 Python
Python用61行代码实现图片像素化的示例代码
2018/12/10 Python
python二元表达式用法
2019/12/04 Python
VS2019+python3.7+opencv4.1+tensorflow1.13配置详解
2020/04/16 Python
python给视频添加背景音乐并改变音量的具体方法
2020/07/19 Python
HTML5使用DOM进行自定义控制示例代码
2013/06/08 HTML / CSS
美国最受欢迎的童装品牌之一:The Children’s Place
2016/07/23 全球购物
sealed修饰符是干什么的
2012/10/23 面试题
《小壁虎借尾巴》教学反思
2014/02/16 职场文书
机械设计及其自动化专业求职信
2014/06/09 职场文书
社会实践活动总结范文
2014/07/03 职场文书
法院干警四风问题自我剖析材料
2014/09/29 职场文书
银行业务授权委托书
2014/10/10 职场文书
2014年幼儿园班级工作总结
2014/12/17 职场文书
2015暑期工社会实践报告
2015/07/13 职场文书
初中化学教学反思
2016/02/22 职场文书
确保减税降费落地生根,用实实在在措施
2019/07/19 职场文书
TV动画《神废柴☆偶像》公布先导PV
2022/03/20 日漫