共计 3616 个字符,预计需要花费 10 分钟才能阅读完成。
前言:欢送来到 Node.js 20
Node.js 20 曾经公布,带来了翻新和激动人心的新时代。这个开创性的版本于 2023 年 4 月 18 日首次亮相,并将在 2023 年 10 月公布长期反对(LTS)版本,并且将继续反对至 2026 年 4 月,上面小编就为大家介绍一下 Node.js20 的几个新个性:
1.Node.js 权限拜访
Node.js 20 正式推出了权限模型,这是 Rafael Gonzaga 提供的一项试验性功能,能够在程序运行时限度对特定资源的拜访。
要应用这个弱小的性能,只需启用 –experimental-permission 标记,例如:
node --experimental-permissions myApp.js
这将限度所有可用权限的拜访,这样就能够确保应用程序远离任何不受欢迎的入侵者。
文件读写零碎
要容许拜访文件系统,请应用 –allow-fs-read 和 –allow-fs-write 标记:
$ node --experimental-permission --allow-fs-read=* --allow-fs-write=* index.js
Hello world!
(node:19836) ExperimentalWarning: Permission is an experimental feature
(Use `node --trace-warnings ...` to show where the warning was created)
上面是具体指令的含意:
- –allow-fs-read=*- 它将容许所有 FileSystemRead 操作。
- –allow-fs-write=*- 它将容许所有 FileSystemWrite 操作。
- –allow-fs-write=/tmp/- 它将容许 FileSystemWrite 拜访该 /tmp/ 文件夹。
- –allow-fs-read=/tmp/,/home/.gitignore- 它容许 FileSystemRead 拜访 /tmp/ 文件夹 和门路 /home/.gitignore。
2. 自定义 ESM 加载器钩子
Node.js 20 通过加载器提供的自定义钩子
(–experimental-loader=./mr.mjs)在专用线程上运行,确保所有都放弃颠三倒四。
以下是如何应用自定义加载器的疾速示例:
loading.mjs
export async function resolve(specifier, parentModuleURL, defaultResolve) {console.log("Resolving:", specifier);
return defaultResolve(specifier, parentModuleURL);
}
export async function load(url, defaultLoad) {console.log("Loading:", url);
return defaultLoad(url);
}
index.js
console.log("Hello, Node.js 20!");
cmd
node --experimental-loader=./loader.mjs main.js
这个自定义加载器将记录每个模块的解析和加载过程。
3. 同步的 import.meta.resolve()
为了跟上浏览器行为,当初 import.meta.resolve 函数返回同步。但仍能够依据须要自定定义加载器解析钩子为异步或同步函数。
以下是一个疾速示例,展现它是如何工作的:
module.mjs
(async () => {const resolvedURL = import.meta.resolve('./otherModule.mjs');
console.log("Resolved URL:", resolvedURL);
const asyncResolvedURL = await import.meta.resolve('./otherModule.mjs');
console.log("Async resolved URL:", asyncResolvedURL);
})();
这个示例演示了 import.meta.resolve 函数的同步和异步用法。
4.V8 引擎降级:开释野兽!
以下是一些 V8 引擎新性能的疾速概述:
- 施展正则表达式的有限后劲:应用设置符号 + 字符串属性的 RegExp v 标记,开启更灵便、更富表现力的语法!
- 动静调整内存大小,优化性能尽在把握:可调整大小的 ArrayBuffer 和可增长的 SharedArrayBuffer,让内存治理达到前所未有的境界!
- 平安而可预测的数组操作方法:复制更改 Array 和 TypedArray 的形式,让代码既平安又可控,不批改原始数据!
- 打造格局良好的 Unicode 字符串:通过 String.prototype.isWellFormed 和 toWellFormed,验证并转换字符串为完满的 Unicode 格局!
- 辞别堆栈溢出,迎接高效递归:WebAssembly 尾调带来有限递归的可能性,让堆栈溢出成为历史!
5. 稳固的测试运行器
Node.js 20 中的 test_runner 模块曾经降级并标记为稳固版本,这意味着它曾经筹备好投入理论利用了。
上面是一个简略的示例:
import {test, mock} from 'node:test';
import assert from 'node:assert';
import fs from 'node:fs';
mock.method(fs, 'readFile', async () => "Hello World");
test('synchronous passing test', async (t) => {
// This test passes because it does not throw an exception.
assert.strictEqual(await fs.readFile('a.txt'), "Hello World");
});
6. 性能加强:为应用程序提速!
Node.js 20 重视性能,提供了一些杰出的加强性能,将使利用程序运行更加晦涩和疾速。以下是一些亮点:
- 事件指标初始化老本升高:初始化当初只须要一半的工夫,使应用程序更加迅捷。
- V8 疾速 API 调用:在诸如 URL.canParse() 和定时器等 API 中享受改良的性能。
7.Ada 2.0:新一代 URL 解析器巨星
Ada 2.0 是用 C++ 编写的最新和最棒的 URL 解析器版本。这个工具为 URL 解析性能带来了显著的改良,使的应用程序比以往更加高效。
以下是 Ada 2.0 如何应用的一个简略示例:
import {domainToASCII, domainToUnicode} from 'node:url';
const asciiDomain = domainToASCII('example.com');
console.log("ASCII Domain:", asciiDomain);
const unicodeDomain = domainToUnicode('xn--exmple-cua.com');
console.log("Unicode Domain:", unicodeDomain);
以上代码演示了如何应用 Ada 2.0 将域名转换为其 ASCII 和 Unicode 示意模式。
8. 筹备 SEAs:杰出的 Blob 繁多可执行应用程序。
Node.js 20 引入了一种新的构建繁多可执行应用程序(SEAs)的形式,通过将由 Node.js 从 JSON 配置中筹备的 Blob 注入其中。这容许将多个共存的资源嵌入到 SEAs 中。
它的工作原理如下:
{
"main": "hello.js",
"output": "prep.blob"
}
node --experimental-sea-config sea-config.json
这将创立一个 prep.blob 文件,其中蕴含了 SEA 所需的资源。
9. 网络加密 API
在 Node.js 20 中 Web Crypto API 函数参数的强制转换和验证遵循 WebIDL 定义,就像 Web Crypto API 的其余实现一样。
这进步了与其余 JavaScript 环境的互操作性,在每个环境都能够敌对运行!
10. 其余变动的中央
除了咱们介绍的所有杰出性能之外,Node.js 20 还包含一些其余不错的更新,以加强开发体验:
- 更好的 TypeScript 反对:应用 TypeScript 编写更洁净、更高效的代码。
- 改良的 TLS 1.3 反对:享受更弱小的加密来保障平安通信。
- 更快的启动工夫:应用程序启动速度更快。
- 无效的错误处理:优雅地处理错误,确保应用程序安稳运行。
- 改良的调试体验:轻松解决那些厌恶的谬误。
总结
这就是 Node.js 20 带来的令人大开眼界的翻新点的介绍,如果各位想获取更多的详细信息,请拜访 Node.js 20 官网。
扩大链接:
如何在前端零碎中应用甘特图
窗口函数大揭秘!轻松计算数据累计占比,玩转数据分析的绝佳利器
探秘挪动端 BI:倒退历程与利用前景解析