当前位置:首页 > 日记 > 正文

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

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

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

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

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

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

相关文章

数组Array的一些方法 | 总结

数组Array的一些方法 | 总结

方法,数组,电脑软件,Array,数组对象属性和方法的概述:1> arr.push() 将参数添加至数组的末尾,返回的是新数组的长度2> arr.unshift() 将参数添加到数组的开头,返回新数组的长度3> arr.shift() 删除数组的第一位,返回被删除的数字4> arr.pop() …

JS实现按钮控制计时开始和停止功能

JS实现按钮控制计时开始和停止功能

控制,按钮,功能,电脑软件,JS,下面给大家分享一段实例代码关于JS实现按钮控制计时开始和停止功能,具体代码如下所示:<span style="font-size:18px;"><body> 小闹钟: <span id="nz"></span> <input type="button" value="开始计时" o…

cdr怎么给添加艺术印象派效果?

cdr怎么给添加艺术印象派效果?

印象派,效果,艺术,电脑软件,cdr,cdr中图片可以制作很多效果,今天我们就来看看使用艺术笔触给图片添加艺术效果的教程。软件名称:CorelDraw x6 (Cdr x6) 官方简体中文破解版(32位)安装图文教程、破解注册方法软件大小:更新时间:2014-08-271、打开C…

javascript 中null和undefined区分

javascript 中null和undefined区分

电脑软件,javascript,null,undefined,javascript 中null和undefined区分和比较Undefined类型Undefined 类型只有一个值,即特殊 undefined 。在使用 var 声明变量但未对其加以初始化时,这个变量的值就是 undefined ,例如:var message;alert(mess…

微信小视频临时保存在哪微信小视频

微信小视频临时保存在哪微信小视频

位置,方法,小视频,电脑软件,strong,  为方便广大微信用户,微信小视频新推出了这个临时保存的功能,那么临时保存的位置到底在哪呢?小编整理了关于微信小视频临时保存的位置,希望对大家有帮助!查看微信小视频临时保存位置的方法1、首先大家先进…

ppt2010怎么设置页码大小ppt2010设

ppt2010怎么设置页码大小ppt2010设

设置,步骤,方法,页码,大小,  有事需要在PPT中添加图片,是不是感觉PPT太小,只能缩小图片导致图片模糊不清?此时要怎么做呢?下面小编教你怎么设置页码大小。希望对你有帮助!ppt2010设置页码大小的步骤1.打开软件:先打开PowerPoint,新建一个幻灯…

JS实现加载时锁定HTML页面元素的方

JS实现加载时锁定HTML页面元素的方

元素,锁定,加载,方法,页面,本文实例讲述了JS实现加载时锁定HTML页面元素的方法。分享给大家供大家参考,具体如下:在html加载时js锁定页面内所有input,textarea,select 具体js如下index.jsfor(z=0;z<document.getElementsByTagName('input').…

JS开发中基本数据类型具体有哪几种

JS开发中基本数据类型具体有哪几种

基本数据类型,几种,电脑软件,JS,JS开发中基本数据类型有哪些?JS的数据类型包括基本数据类型、复杂数据类型和特殊数据类型,今天我们主要先讲解一下基本数据类型。0、先提示两个下面用到的知识点:0.1typeof,是用来检测变量类型的写法:typeof a;0.2…

快速解决百度编译器json报错的问题

快速解决百度编译器json报错的问题

百度,编译器,报错,快速,电脑软件,在MyEclipse中JSON字符串的换行值是不同的,必须以'/n'换行,如果只是json验证的问题,可以把json的验证关掉试试。点击所在的项目->Project->Proterties->MyEclipse->Validation,把JSON Validator中的Manual和…

应用word模板的两种方法

应用word模板的两种方法

方法,模板,两种,电脑软件,word,  Word模板是指Microsoft Word中内置的包含固定格式设置和版式设置的模板文件,用于帮助用户快速生成特定类型的Word文档。借助这些模板,用户可以创建比较专业的Word文档。那么下面就由小编给大家分享下应用wo…

手机美丽说怎么用微信支付?

手机美丽说怎么用微信支付?

微信支付,美丽,电脑软件,  手机美丽说怎么用微信支付?美丽说专为时尚女生量身定做的利器,让MM们紧跟潮流的时尚热榜,足不出户就可以感受到当下的流行主题,MM们可以选择自己感兴趣的时尚主题、分享搭配照片!下面小编就告诉大家美丽说微信支付…

解决vue里碰到 $refs 的问题的方法

解决vue里碰到 $refs 的问题的方法

方法,电脑软件,vue,refs,本篇文章介绍了vue里碰到 $refs 的问题,分享给大家,希望能帮助大家解决问题记录困惑自己一个简单的问题...(瞬间感觉官方文档的强大)在自己做的一个项目中,遇到一个列表页,根据id能进入详情页(动态匹配路由),详情页是单独…