Node.js v8.0.0正式发布!看看带来了哪些主要新特性


Posted in Javascript onJune 02, 2017

前言

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等方面的改进。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
javascript 页面只自动刷新一次
Jul 10 Javascript
JQUERY设置IFRAME的SRC值的代码
Nov 30 Javascript
如何在JavaScript中实现私有属性的写类方式(二)
Dec 04 Javascript
JavaScript实现把rgb颜色转换成16进制颜色的方法
Jun 01 Javascript
浅谈js中的三种继承方式及其优缺点
Aug 10 Javascript
JS实现DIV高度自适应窗口示例
Feb 16 Javascript
bootstrap模态框嵌套、tabindex属性、去除阴影的示例代码
Oct 17 Javascript
VueJs 将接口用webpack代理到本地的方法
Nov 27 Javascript
每周一练 之 数据结构与算法(Stack)
Apr 16 Javascript
vue中filters 传入两个参数 / 使用两个filters的实现方法
Jul 15 Javascript
ES6对象操作实例详解
May 23 Javascript
vue-cli3项目配置eslint代码规范的完整步骤
Sep 10 Javascript
详解在AngularJS的controller外部直接获取$scope
Jun 02 #Javascript
详解angularJs中关于ng-class的三种使用方式说明
Jun 02 #Javascript
vue.js删除动态绑定的radio的指定项
Jun 02 #Javascript
vue.js选中动态绑定的radio的指定项
Jun 02 #Javascript
Spring shiro + bootstrap + jquery.validate 实现登录、注册功能
Jun 02 #jQuery
Vue.js中数据绑定的语法教程
Jun 02 #Javascript
SpringMVC+bootstrap table实例详解
Jun 02 #Javascript
You might like
PHP与javascript的两种交互方式
2006/10/09 PHP
php PDO中文乱码解决办法
2009/07/20 PHP
php 函数使用方法与函数定义方法
2010/05/09 PHP
PHP分页函数代码(简单实用型)
2010/12/02 PHP
PHP使用in_array函数检查数组中是否存在某个值
2015/03/25 PHP
CI框架整合smarty步骤详解
2016/05/19 PHP
Thinkphp 框架基础之源码获取、环境要求与目录结构分析
2020/04/27 PHP
对采用动态原型方式无法展示继承机制得思考
2009/12/04 Javascript
javascript showModalDialog模态对话框使用说明
2009/12/31 Javascript
无缝滚动改进版支持上下左右滚动(封装成函数)
2012/12/04 Javascript
js中浮点型运算BUG的解决方法说明
2014/01/06 Javascript
js取模(求余数)隔行变色
2014/05/15 Javascript
js中for in语句的用法讲解
2015/04/24 Javascript
jQuery 实现评论等级好评差评特效
2016/05/06 Javascript
基于Node.js的JavaScript项目构建工具gulp的使用教程
2016/05/20 Javascript
利用BootStrap弹出二级对话框的简单实现方法
2016/09/21 Javascript
JavaScript订单操作小程序完整版
2017/06/23 Javascript
深入研究jQuery图片懒加载 lazyload.js使用方法
2017/08/16 jQuery
JS实现的JSON数组去重算法示例
2018/04/11 Javascript
vue项目打包部署到服务器的方法示例
2018/08/27 Javascript
VUE简单的定时器实时刷新的实现方法
2019/01/20 Javascript
vue 中Virtual Dom被创建的方法
2019/04/15 Javascript
vue实现一拉到底的滑动验证
2019/07/25 Javascript
layui 弹出层值回传解决方式
2019/11/14 Javascript
从Python程序中访问Java类的简单示例
2015/04/20 Python
Python实现matplotlib显示中文的方法详解
2018/02/06 Python
Python3实现的简单验证码识别功能示例
2018/05/02 Python
python读取文件名并改名字的实例
2019/01/07 Python
CSS3中Animation动画属性用法详解
2016/07/04 HTML / CSS
中国第一家杂志折扣订阅网:杂志铺
2016/08/30 全球购物
在C#中如何实现多态
2014/07/02 面试题
学生爱国演讲稿
2014/01/14 职场文书
白酒代理协议书范本
2014/10/26 职场文书
2014年村计划生育工作总结
2014/11/14 职场文书
5种 JavaScript 方式实现数组扁平化
2021/10/05 Javascript
聊聊redis-dump工具安装问题
2022/01/18 Redis