赞
踩
官方链接
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运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用
接下来整理的是开发中常用的特性,一些作者认为不常用的可能会不记录或者记录的不详细
让我们看下 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个月。
生命周期图
2023-04-18发布
Node.js 现在有一个名为权限模型的实验性功能。它允许开发人员在程序执行期间限制对特定资源的访问,例如文件系统操作、子进程生成和工作线程创建。API 存在于一个标志后面–experimental-permission,启用后将限制对所有可用权限的访问。通过使用此功能,开发人员可以防止他们的应用程序访问或修改敏感数据或运行可能有害的代码。
通过加载程序 ( ) 提供的 ESM 挂钩–experimental-loader=foo.mjs现在在与主线程隔离的专用线程中运行。这为加载程序提供了一个单独的范围,并确保加载程序和应用程序代码之间没有交叉污染。
为了与浏览器行为保持一致,此函数现在同步返回。尽管如此,用户加载resolve程序挂钩仍然可以定义为异步函数(或同步函数,如果作者愿意的话)。即使resolve加载了异步挂钩,import.meta.resolve仍会同步返回应用程序代码。
V8 引擎更新到版本 11.3,它是 Chromium 113 的一部分。这个版本包括 JavaScript API 的三个新特性
最近对 Node.js 版本 20 的更新包括对 test_runner 模块的重要更改。在最近的更新后,该模块已被标记为稳定。以前,test_runner 模块是实验性的,但这次更改标志着它是一个可以用于生产的稳定模块。
它主要用来编写并运行测试文件,类似mock等测试组件包
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");
});
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 要求。
2022-10-18发布
从此版本开始,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 请求可能会体验到更好的吞吐量/性能。
V8 引擎更新到 10.7 版,它是 Chromium 107 的一部分。该版本包括 JavaScript API 的新功能:Intl.NumberFormat.
Intl.NumberFormatv3 API 是一个新的TC39 ECMA402 第 3 阶段提案, 扩展了现有的Intl.NumberFormat.
llhttp 已经更新到 8.1.0 版本。总的来说,这个版本对 llhttp API 带来了许多更新,引入了新的回调并允许所有回调都可以暂停。
2022-04-19发布
默认情况下,全局范围内提供了一个实验性的获取 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
server.headersTimeout这限制了解析器等待接收完整 HTTP 标头的时间,现在60000默认设置为(60 秒)。
server.requestTimeout300000设置从客户端接收整个请求的超时值(以毫秒为单位)现在默认设置为(5 分钟)。
如果这些超时到期,服务器将以状态 408 响应而不将请求转发给请求侦听器,然后关闭连接。
两个超时都必须设置为非零值,以防止在服务器部署前没有反向代理的情况下发生潜在的拒绝服务攻击。
该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);
});
});
V8 引擎更新到 10.1 版本,它是 Chromium 101 的一部分。与 Node.js 17.9.0 中包含的版本相比,包括以下新特性
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
2021-10-19发布
V8 JavaScript 引擎更新到 V8 9.5。此版本附带Intl.DisplayNamesAPI 的其他受支持类型和timeZoneNameAPI 中的扩展选项Intl.DateTimeFormat
该模块提供了一个接口,用于一次一行地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();
2021-04-21发布
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
这次V8的升级带来了ECMAScript RegExp比对索引功能,能提供字符串的开始与结束索引。当正则表达式带有/d标签时,可以通过indices属性访问到索引数组。
2020-04-21发布
2019-10-22发布
如果验证函数传递给assert.throws()或assert.rejects() 返回的值不是true,则将抛出断言错误而不是原始错误以突出显示编程错误(Ruben Bridgewater)
Node.js 版本现在使用默认的 full-icu 支持构建。这意味着现在包含了 ICU 支持的所有语言环境,并且与国际相关的 API 可能会返回与以前不同的值(Richard Lau)
新增对象解构、内存使用和 WebAssembly 启动时间的性能改进
2019-04-29发布
在V8 7.4中,对于开发人员来说最重要的新特性是预计计算属性,可以让开发人员更方便地通过表达式来定义对象属性,同时引入了更多的原型方法。此外,V8 7.4还实现了大量的内存管理和性能改进,这将使得Node.js 12的性能更加稳定和可靠。
随着Web应用程序变得越来越庞大,加载和解析JavaScript模块的速度越来越成为Web开发的瓶颈。为了解决这个问题,Node.js 12引入了较新的V8版本的快速对象存储访问,从而使得ES模块的加载和解析速度更快,可实现更快的Web应用程序加载时间和启动时间。
HTTP/2作为HTTP协议的下一代,拥有比HTTP 1.x更快、更安全的数据传输速度。Node.js 12支持HTTP/2的完整支持,包括对HTTP/2流的完整流控、过程化二进制协议的解码和对H2C升级的支持。同样,Node.js 12还支持ALPN协议,在HTTPS请求中使用HTTP/2。
2018-10-23发布
2018-04-24发布
该EventEmitter.prototype.off()方法已添加为 的别名EventEmitter.prototype.removeListener()
工作线程主要用于解决node计算类的业务问题。但需要注意的是,对io类操作没有作用。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。