NodeJs 最近各版本特性汇总

这篇具有很好参考价值的文章主要介绍了NodeJs 最近各版本特性汇总。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

(预测未来最好的方法就是把它创造出来——尼葛洛庞帝)

NodeJs 最近各版本特性汇总

NodeJs

官方链接
github链接
V8链接
Node.js发布于2009年5月,由Ryan Dahl开发,是一个基于Chrome V8引擎的JavaScript运行环境,使用了一个事件驱动、非阻塞式I/O模型, [1] 让JavaScript 运行在服务端的开发平台,它让JavaScript成为与PHP、Python、Perl、Ruby等服务端语言平起平坐的脚本语言。 [2]
Node.js对一些特殊用例进行优化,提供替代的API,使得V8在非浏览器环境下运行得更好,V8引擎执行Javascript的速度非常快,性能非常好,基于Chrome JavaScript运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用

接下来整理的是开发中常用的特性,一些作者认为不常用的可能会不记录或者记录的不详细

NodeJs的发布规则

  • CURRENT:指代最新的 Node.js 版本系列。
  • Active:指正在积极维护和升级的版本系列,包括向后移植非破坏性功能和改进,解决错误以及修补安全漏洞。
  • Maintenance:这是一个维护的 LTS 版本系列,直到它的生命周期终止,只会在短时间内收到错误修复和安全补丁。
  • LTS:是Long-Term Support 的缩写,代表 Node.js 长期支持的版本(版本号为复数)。
  • EOL:EOL 是 End of Life 的首字母缩写,进入到 EOL 时间线的版本,将不在维护。

让我们看下 Node.js版本的生命周期是怎么样的?首先要知道每年的 4 月、10 月分别发布偶数、奇数版本,下面是过程说明:

最近的一个偶数版本在 4 月份发布之后会持续 6 个月。 待 10 月份会发布一个奇数版本,最近的偶数版本会进入 Active LTS版本。持续时间为 18 个月,这期间几乎不会有不兼容的大功能更新,开发者也可以放心升级到 Active LTS 版本。
18 个月的Active LTS 版本到期后,会进入 Maintenance LTS 版本,也就是进入维护期,时间为 12
个月,在这期间仅进行安全、Bug 更新。 一旦 Maintenance LTS 版本 12 个月的时间已到就会进入 EOL
版本,正式退出历史舞台。
其中偶数版本会持续维护18个月,而奇数版本指挥维护8个月。
生命周期图
NodeJs 最近各版本特性汇总

20.0.0

2023-04-18发布

1. 权限模型

Node.js 现在有一个名为权限模型的实验性功能。它允许开发人员在程序执行期间限制对特定资源的访问,例如文件系统操作、子进程生成和工作线程创建。API 存在于一个标志后面–experimental-permission,启用后将限制对所有可用权限的访问。通过使用此功能,开发人员可以防止他们的应用程序访问或修改敏感数据或运行可能有害的代码。

  • 使用–allow-fs-read和–allow-fs-write限制对文件读写系统的访问
  • 使用–allow-child-process限制访问 child_process
  • 使用–allow-worker限制访问 worker_threads
  • 使用–no-addons制对本机插件的访问
2. 自定义 ESM 加载程序挂钩在专用线程上运行

通过加载程序 ( ) 提供的 ESM 挂钩–experimental-loader=foo.mjs现在在与主线程隔离的专用线程中运行。这为加载程序提供了一个单独的范围,并确保加载程序和应用程序代码之间没有交叉污染。

3. import.meta.resolve()

为了与浏览器行为保持一致,此函数现在同步返回。尽管如此,用户加载resolve程序挂钩仍然可以定义为异步函数(或同步函数,如果作者愿意的话)。即使resolve加载了异步挂钩,import.meta.resolve仍会同步返回应用程序代码。

4. V8 11.3

V8 引擎更新到版本 11.3,它是 Chromium 113 的一部分。这个版本包括 JavaScript API 的三个新特性

  • String.prototype.isWellFormed 和 toWellFormed
    isWellFormed用于检查这个字符串是否是一个合法的 Unicode,而toWellFormed则会将一个字符串转换为 Unicode。
通过复制改变 Array 和 TypedArray 的方法
现有的Array.prototype和TypedArray.prototype的函数会直接修改接收的数组。而新函数会返回接收的数组的修改副本,并将原始数组保持不变。这些新函数在数据不可变的编程风格中很有用。
可调整大小的 ArrayBuffer 和可增长的 SharedArrayBuffer
带有集合符号的 RegExp v 标志 + 字符串的属性
WebAssembly 尾调用
5. 稳定的测试运行器

最近对 Node.js 版本 20 的更新包括对 test_runner 模块的重要更改。在最近的更新后,该模块已被标记为稳定。以前,test_runner 模块是实验性的,但这次更改标志着它是一个可以用于生产的稳定模块。
它主要用来编写并运行测试文件,类似mock等测试组件包

  • describe/it/test函数,以及测试文件的钩子。
  • mock 数据。
  • 监听文件变化模式(watch mode)。
  • node --test支持并行运行多个测试文件。
import { test, mock } from "node:test";
import assert from "node:assert";
import fs from "node:fs";

mock.method(fs, "readFile", async () => "Hello ZY");
test("synchronous passing test", async (t) => {
  // This test passes because it does not throw an exception.
  assert.strictEqual(await fs.readFile("zy.txt"), "Hello ZY");
});

6. Ada 2.0

Node.js v20 附带了最新版本的 URL 解析器 Ada。此更新为 URL 解析带来了显着的性能改进,包括增强url.domainToASCII了.url.domainToUnicodenode:url

Ada 2.0 已集成到 Node.js 代码库中,确保应用程序的所有部分都能从改进的性能中受益。此外,Ada 2.0 比其前身 Ada 1.0.4 具有显着的性能提升,同时还消除了对 URL 主机名解析的 ICU 要求。

19.0.0

2022-10-18发布

1. HTTP(S)/1.1 KeepAlive 默认

从此版本开始,Node.jskeepAlive默认设置为 true。这意味着任何传出的 HTTP(s) 连接都将自动使用 HTTP 1.1 Keep-Alive。默认等待时间为 5 秒。启用 keep-alive 将提供更好的吞吐量,因为默认情况下会重用连接。

此外,代理现在能够解析Keep-Alive服务器可能发送的响应。此标头指示客户端保持连接的程度。另一方面,Node.js HTTP 服务器现在将在调用时自动断开空闲客户端(使用 HTTP Keep-Alive 重用连接)close()。

默认情况下,Node.js HTTP(S)/1.1 请求可能会体验到更好的吞吐量/性能。

2. 删除了 DTrace/SystemTap/ETW 支持
3. V8 10.7

V8 引擎更新到 10.7 版,它是 Chromium 107 的一部分。该版本包括 JavaScript API 的新功能:Intl.NumberFormat.

Intl.NumberFormatv3 API 是一个新的TC39 ECMA402 第 3 阶段提案, 扩展了现有的Intl.NumberFormat.

4. llhttp 8.1.0

llhttp 已经更新到 8.1.0 版本。总的来说,这个版本对 llhttp API 带来了许多更新,引入了新的回调并允许所有回调都可以暂停。

18.0.0

2022-04-19发布

1. fetch(实验性)

默认情况下,全局范围内提供了一个实验性的获取 API。该实现基于undici,一个由项目贡献者为 Node.js 编写的 HTTP/1.1 客户端。

const res = await fetch('https://nodejs.org/api/documentation.json');
if (res.ok) {
  const data = await res.json();
  console.log(data);
}

通过此添加,可以使用以下全局变量:fetch, FormData, Headers, Request, Response
使用–no-experimental-fetch命令行标志禁用此 API

2. HTTP 超时

server.headersTimeout这限制了解析器等待接收完整 HTTP 标头的时间,现在60000默认设置为(60 秒)。

server.requestTimeout300000设置从客户端接收整个请求的超时值(以毫秒为单位)现在默认设置为(5 分钟)。

如果这些超时到期,服务器将以状态 408 响应而不将请求转发给请求侦听器,然后关闭连接。

两个超时都必须设置为非零值,以防止在服务器部署前没有反向代理的情况下发生潜在的拒绝服务攻击。

3. Test Runner 模块(实验性的)

该node:test模块有助于创建以 TAP 格式报告结果的 JavaScript 测试。

import test from 'node:test';

该模块仅在该方案下可用node:
以下是具有两个子测试的父测试的示例实现:

test('top level test', async (t) => {
  await t.test('subtest 1', (t) => {
    assert.strictEqual(1, 1);
  });

  await t.test('subtest 2', (t) => {
    assert.strictEqual(2, 2);
  });
});
4. 工具链和编译器升级
5. V8 10.1

V8 引擎更新到 10.1 版本,它是 Chromium 101 的一部分。与 Node.js 17.9.0 中包含的版本相比,包括以下新特性

findLast数组findLastIndex方法
const inputArray = [{v:1}, {v:2}, {v:3}, {v:4}, {v:5}];
inputArray.findLast((element) => element.v % 2 === 0);
// → {v:4}
inputArray.findLast((element) => element.v % 7 === 0);
// → undefined
inputArray.findLastIndex((element) => element.v % 2 === 0);
// → 3
inputArray.findLastIndex((element) => element.v % 7 === 0);
// → -1
Intl.LocaleAPI的改进。
Intl.supportedValuesOf
改进了类字段和私有类方法的性能(它们的初始化现在与普通属性存储一样快)

17.0.0

2021-10-19发布

1. OpenSSL 3.0
2. V8 9.5

V8 JavaScript 引擎更新到 V8 9.5。此版本附带Intl.DisplayNamesAPI 的其他受支持类型和timeZoneNameAPI 中的扩展选项Intl.DateTimeFormat

3. Readline 承诺 API

该模块提供了一个接口,用于一次一行地readline从 Readable 流(例如 )中读取数据。process.stdin

以下简单示例说明了该readline模块的基本用法

import * as readline from 'node:readline/promises';
import { stdin as input, stdout as output } from 'process';

const rl = readline.createInterface({ input, output });

const answer = await rl.question('What do you think of Node.js? ');

console.log(`Thank you for your valuable feedback: ${answer}`);

rl.close();

16.0.0

2021-04-21发布

1. 稳定Timers Promises API

Timers Promises API 提供了一组替代的计时器函数,它们返回 Promise 对象。在 Node.js v15.0.0 中添加,在此版本中,它们从实验状态升级到稳定状态。

import { setTimeout } from 'timers/promises';

async function run() {
  const res = await setTimeout(3000, 'fullFilledValue');
  console.log(`Get result=>${res} after 3s`);
}

run(); // 3s后输出:Get result=>fullFilledValue after 3s
2. 工具链和编译器升级
3. V8 JavaScript 引擎更新到 V8 9.0,包括性能调整和改进

这次V8的升级带来了ECMAScript RegExp比对索引功能,能提供字符串的开始与结束索引。当正则表达式带有/d标签时,可以通过indices属性访问到索引数组。

14.0.0

2020-04-21发布

1. V8 8.1
可选链接
Nullish 合并
Intl.DisplayNames
为 Intl.DateTimeFormat 启用 calendar 和 numberingSystem 选项
2. 实验性异步本地存储 API
3. 强化流 API

13.0.0

2019-10-22发布

1. 断言

如果验证函数传递给assert.throws()或assert.rejects() 返回的值不是true,则将抛出断言错误而不是原始错误以突出显示编程错误(Ruben Bridgewater)

2. 构建

Node.js 版本现在使用默认的 full-icu 支持构建。这意味着现在包含了 ICU 支持的所有语言环境,并且与国际相关的 API 可能会返回与以前不同的值(Richard Lau)

3. V8 7.8

新增对象解构、内存使用和 WebAssembly 启动时间的性能改进

12.0.0

2019-04-29发布

1. V8 7.4

在V8 7.4中,对于开发人员来说最重要的新特性是预计计算属性,可以让开发人员更方便地通过表达式来定义对象属性,同时引入了更多的原型方法。此外,V8 7.4还实现了大量的内存管理和性能改进,这将使得Node.js 12的性能更加稳定和可靠。

2. 更快的ES模块加载

随着Web应用程序变得越来越庞大,加载和解析JavaScript模块的速度越来越成为Web开发的瓶颈。为了解决这个问题,Node.js 12引入了较新的V8版本的快速对象存储访问,从而使得ES模块的加载和解析速度更快,可实现更快的Web应用程序加载时间和启动时间。

3. HTTP/2的完整支持

HTTP/2作为HTTP协议的下一代,拥有比HTTP 1.x更快、更安全的数据传输速度。Node.js 12支持HTTP/2的完整支持,包括对HTTP/2流的完整流控、过程化二进制协议的解码和对H2C升级的支持。同样,Node.js 12还支持ALPN协议,在HTTPS请求中使用HTTP/2。

11.0.0

2018-10-23发布

1. V8 7.0
2. fs
  1. fs.read()方法现在需要回调
  2. 以前弃用的fs.SyncWriteStream实用程序已被删除
3. console
  1. console.countReset()如果重置的计时器不存在,将发出警告
  2. console.time()如果计时器已经存在,将不再重置它

10.0.0

2018-04-24发布

1. 断言
  1. 添加了和assert.rejects()方法assert.doesNotReject()以使用异步函数
  2. assert.throws()接受一个对象来与错误进行比较
2. 异步钩子
  1. 旧的实验性 async_hooks API 已被删除
3. Buffer
  1. 使用目录new Buffer()和Buffer()外部目录node_modules现在将发出运行时弃用警告
  2. Buffer.isEncoding()现在返回undefined虚假值,包括空字符串
  3. Buffer.fill()如果尝试填充一个空的Buffer
  4. noAssert参数已从所有Buffer读写函数中删除
4. V8 6.6
5. 发送事件

该EventEmitter.prototype.off()方法已添加为 的别名EventEmitter.prototype.removeListener()

6. fs
  1. APIfs/promises提供了函数的实验性承诺版本fs
  2. 现在会同步抛出无效路径错误
  3. 该fs.readFile()方法现在对读取进行分区以避免线程池耗尽
7. node10x后续版本开放了工作线程

工作线程主要用于解决node计算类的业务问题。但需要注意的是,对io类操作没有作用。文章来源地址https://www.toymoban.com/news/detail-489970.html

到了这里,关于NodeJs 最近各版本特性汇总的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [mars3d 学习] 最近升级版本造成的问题

    1、mars3d升级3.5以上,使用的时候报错; 需要看下 Mars3D三维可视化平台 | 火星科技 版本更新日志; 使用将Cesium的版本升级到1.103 2、升级Cesium到1.103,之后打包又会报错 - error in ./node_modules/mars3d-Cesium/Build/Cesium/index.js 哦,是因为cesium1.96改变了代码打包方式;在vue2中就会存在

    2024年02月17日
    浏览(67)
  • 走近JDK 17,探索最新Java特性,拥抱未来编程!

    大家好,我是小米,一个热爱技术分享的程序员。今天,我将为大家介绍一下JDK 17的新特性。JDK 17是Java开发工具包的一个重要版本,其中包含了许多令人激动的新功能和改进。在这篇文章中,我将详细介绍JDK 17中的各项特性,并说明它们在电商应用场景中的应用。 密封类(

    2024年02月11日
    浏览(43)
  • nodejs:本地安装nvm实现nodejs多版本管理及切换版本

    一、背景-使用不同版本node的原因 vue3+ts、nuxt3版本,node推荐使用node18。 vue2、nuxt2,node 建议使用node16,如果使用18版本,可能会启动不了项目。 等等情况,所以我们本地最好能控制node版本,在需要的时候使用合适的版本。 二、nvm方法安装和切换不同版本nodejs 2.1、理解nvm N

    2024年02月04日
    浏览(51)
  • 时序预测 | MATLAB实现ELM极限学习机时间序列预测未来

    预测效果 基本介绍 1.MATLAB实现ELM极限学习机时间序列预测未来; 2.运行环境Matlab2018及以上,data为数据集,单变量时间序列预测,运行主程序ELMTSF即可,其余为函数文件,无需运行; 3.递归预测未来数据,可以控制预测未来大小的数目,适合循环性、周期性数据预测; 4.命令

    2024年02月09日
    浏览(47)
  • 人类技术变革简史:区块链的技术特性与未来应用

    区块链技术是一种分布式、去中心化的数字账本技术,它首次出现在2008年的一篇论文中,标题为“Bitcoin: A Peer-to-Peer Electronic Cash System”,作者为伪onym的Satoshi Nakamoto。以下是这篇论文的摘要: 本文提出了一种新的数字货币系统,称为Bitcoin。它的主要特点是去中心化、无需信

    2024年04月12日
    浏览(46)
  • 智慧水务未来技术发展方向预测探讨

    随着科技的不断发展和城市化的加速,智慧水务作为一种新的水务模式,逐渐受到广泛关注。未来,智慧水务将会面临更多的技术挑战和商机。本博客将对智慧水务的未来技术发展方向进行预测,以探讨智慧水务未来可能的技术重点。 未来,人工智能技术将成为智慧水务领域

    2024年01月24日
    浏览(53)
  • 算法备案法规变迁:未来的预测和影响

    随着科技的迅速发展和深度学习技术的普及,算法已经成为企业的核心竞争力之一。从个性化推荐到自动驾驶,算法无处不在,极大地改变了我们的生活。然而,算法的“黑箱”特性也引起了广泛的关注和讨论,如何对算法进行有效的管理和监控,成为了一个重要的问题。近

    2024年02月14日
    浏览(37)
  • 时序预测 | MATLAB实现基于RF随机森林的时间序列预测-递归预测未来(多指标评价)

    预测结果 基本介绍 MATLAB实现基于RF随机森林的时间序列预测-递归预测未来(多指标评价) 1.MATLAB实现基于RF随机森林的时间序列预测-递归预测未来(多指标评价); 2.运行环境Matlab2018及以上,data为数据集,单变量时间序列预测; 3.递归预测未来数据,可以控制预测未来大小的数

    2024年02月12日
    浏览(45)
  • 时序预测 | MATLAB实现基于GRU门控循环单元的时间序列预测-递归预测未来(多指标评价)

    预测结果 基本介绍 1.Matlab实现GRU门控循环单元时间序列预测未来; 2.运行环境Matlab2020及以上,data为数据集,单变量时间序列预测; 3.递归预测未来数据,可以控制预测未来大小的数目,适合循环性、周期性数据预测; 4.命令窗口输出R2、MAE、MAPE、MBE、MSE等评价指标。 运行环

    2024年02月12日
    浏览(45)
  • 八字命运API接口:预测未来,把握机遇

    随着人们对个人命运的关注度不断提高,很多人开始寻找各种方法来预测未来,把握机遇。而其中一种被广泛使用的方法就是八字预测。通过分析个人的生辰八字,可以揭示出一个人未来的发展趋势和潜在的机遇。如今,挖数据平台提供了一个八字命运API接口,可以帮助用户

    2024年02月04日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包