跳到主要内容

Node.js 10有什么新功能?

Node.js勇敢地使JavaScript能够转移到其创建者从未打算使用该语言的地方。新ECMAScript修订版中出现的许多受欢迎的功能最初都是添加到Node.js的功能 - 遗憾的是,标准化的API通常与Node.js开发团队所考虑的不兼容。

因此,Node.js世界的一个反复出现的主题围绕着协调“web开发”和“节点开发”之间的差异。例如,Node.js的模块子系统根据ECMAScript标准不起作用。 Node.js 10更新了产品中使用的各种核心组件的版本,从而使开发人员能够利用速度和安全性改进。

此外,HTTP / 2上的工作加速了带宽和/或延迟受限场景中的内容传输。原生界面的改变将简化Node.js插件开发人员的生活,从而形成更加生动的扩展生态系统。这些变化的高度详细的技术性质使得提供个别示例变得困难。但是,在这篇文章中,我们收集了20条短信息,这些信息将帮助您掌握Node.js 10。

如果您想要始终掌握Node.js的最新发展,请前往这个GitHub页面。它提供了产品变化的详细信息。

01.更新您的环境

Node.js可以手工编译。但是,大多数Linux发行版都能够运行自动安装程序。这里的代码显示了Ubuntu 14.04 LTS上的安装过程。如果您的操作系统出现在图1中,在这里找到类似的过程

tamhan @TAMHAN14:〜$ sudo apt-get remove nodejs tamhan @ TAMHAN14:〜$ curl -sL https:// deb。 nodesource.com/setup_10.x | sudo -E bash  -  tamhan @ TAMHAN14:〜$ sudo apt-get install -y nodejs

02.嗅出错误......

自Node.js 1.0以来,开发人员已执行字符串比较以查找错误。然而,9.0版本开始转向更容易处理的常量。此步骤附带的代码不受拼写错误的影响,并且可以抵制通过重新构造错误消息来提高可用性的尝试。

try {// foo} catch(err){if(err.code ==='ERR_ASSERTION'){。 。 。 } else {。 。 。 }}

03. ......了解他们......

进程计算机程序员不喜欢使用字符串来传输错误状态 - Node.js 10并没有打破这一传统。相反,框架定义了几十个字符串,它们将作为“魔术常量”,并可以在“错误”对象的代码字段中返回。

04. ......并正确描述它们

引入错误代码不会弃用传统的错误消息。基于'.message'字段存在的代码继续执行 - 如果您需要提供最终用户可以理解的消息,您可以像以前一样信任该字段。

const err = new Error('the message'); console.error(err.message);

05.速度随V8更新而来

Node.js总是使用V8运行时来执行JavaScript。与大多数项目合作一样,Node.js通常落后于V8的进展。 Node.js 10基于V8的6.6版本,它在缓存和阵列处理性能方面带来了显着的改进。

06.无头的尝试!

试着抓块是Java程序员的祸根:找到标记为注释的一个指示关闭编译器是常见的。 V8 6.6减轻了不必要的负担尝试渔获物通过让开发人员省略例外来自的对象抓住块。

尝试{doSomethingThatMightThrow(); } Catch {handleException(); }

07.改进功能反射的细节

一个鲜为人知的JavaScript细节涉及函数:它们也可以被视为对象。到目前为止,的toString()方法刚刚返回方法名称。在Node.js 10中,程序返回整个第一行 - 如图所示,返回值甚至可以扩展到各种注释

function / * demo * / sayHurz(){console.log(“Hurz!”); } console.log(sayHurz.toString());

08.补救措施未通过更新

如果您的工作站无法运行新版本的Node.js,请检查包管理器配置。你真的不得不删除以下代码中提到的两个文件,然后才能恢复正常的程序操作:

tamhan @ TAMHAN14:/etc/apt/sources.list.d$ sudo rm nodesource.list tamhan @ TAMHAN14:/etc/apt/sources.list.d$ sudo rm nodesource.list.save

09. ECMAScript模块

虽然Node.js影响了JavaScript模块的概念,但ECMAScript实现与Common.js不兼容。虽然--experimental模块flag已经出现了很长一段时间,Node.js 10带来了一些新功能,旨在让基于ECMAScript的模块在Node环境中工作。

tamhan @ TAMHAN14:〜/ workspace $ node --experimental-modules index

10.了解本机模块架构......

虽然JavaScript可以做很多事情,但有些工作需要使用C ++。到目前为止,寻求更紧密集成的开发人员通常会信任V8 API - 每当Node.js中使用的V8版本发生变化时,都会导致插件重写。

11. ...并看到N-API的改进

值得庆幸的是,N-API通过提供新的抽象层来解决这个问题。对底层平台和工具所做的任何更改都不再暴露给处理插件的开发人员,从而降低了维护负担,并且希望使Node.js升级更加顺畅。

12.了解API

就C API而言,N-API显然是设计得更好的API之一。如图所示在这里令人难以忍受的细节,API配备了处理对象创建,回调等的方法。此外,标头包含一个“锁定”,允许您出于兼容性原因禁用旧版本NAPI中未找到的功能。

#define NAPI_VERSION 3 #include 

13.使用ChaCha20和Poly1305

密码学在网络上始终具有重要意义。 Node.js 10将OpenSSL的底层版本更新为1.1.0,从而使开发人员能够使用新的加密算法,这些算法预计会更加强大。在寻求实施AEAD类型加密方案时,这尤其有用。

14.有针对性的追查

Node.js 10发出一组额外的跟踪参数,从而让开发人员了解性能问题。此外,可以通过此步骤附带的片段中显示的功能随时启用和禁用跟踪对象 - 现在每个开发人员都能获得精确的精确度。

const trace_events = require('trace_events'); const t1 = trace_events.createTracing({categories:['node','v8']}); const t2 = trace_events.createTracing({categories:['node.perf','node']}); t1.enable(); t2.enable(); t2.disable();

15.了解有关追踪的更多信息

在撰写本文时,Node.js支持共有八种迹线类型。除了V8事件,开发人员还可以注册自己的bootstrap,Async_hook和命令行或通过跟踪对象的文件系统同步信息。

const trace_events = require('trace_events'); const tracing = trace_events.createTracing({categories:['node.perf']}); tracing.enable();

16. HTTP / 2现在正式......

虽然Node.js文档中的API稳定性指示器仍然显示HTTP / 2支持是实验性的,但API可以被认为是稳定的。

const http2 = require('http2'); const fs = require('fs'); const server = http2.createSecureServer({key:fs.readFileSync('localhost-privkey.pem'),cert:fs.readFileSync('localhost-cert.pem')}); server.on('error',(err)=> console.error(err));

17. ...但请注意加密

在实现使用HTTP / 2的Node.js服务器时,请记住,在编写时,任何Web浏览器都不支持未加密的协议版本。因此,在无代理配置中发送和接收数据时,您应该准备好处理大量的处理器开销。

server.on('stream',(stream,headers)=> {// stream是Duplex stream.respond({'content-type':'text / html',':status':200}); stream。结束(' 

你好,世界

“); }); server.listen(8443);

18.带有promise的文件系统API

Promise在JavaScript中风靡一时。到目前为止,开发人员通常不得不在没有基于承诺的文件系统API的情况下完成这个问题 - 这个问题已在Node.js 10中得到纠正。FS /承诺它仍然是实验性的,它已经为“传统”文件系统访问提供了一个很好的替代方案。

要求( 'FS /用')

19.关于异步挂钩的工作已经做了很多工作

Node.js默认是单线程的。异步挂钩使代码能够以更舒适的方式关注异步执行的资源 - 虽然API远非稳定,但Node.js 10相对于以前版本中几乎没有工作的实现提供了重大改进。

const async_hooks = require('async_hooks'); const eid = async_hooks.executionAsyncId(); const tid = async_hooks.triggerAsyncId(); const asyncHook = async_hooks.createHook({init,before,after,destroy,promiseResolve});

20. Turbo-NPM

虽然NPM通常被视为Node.js发行版的一部分,但它实际上是一个独立的产品。当前版本的Node.js 10随附NPM 6,在安装和部署软件包时可显着提高速度。在这位作家的机器上,一些过程的速度增加了十倍。

本文最初发表于创意网页设计杂志Web Designer。购买问题279要么订阅

阅读更多:



翻译字数超限