前言:欢送来到 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:倒退历程与利用前景解析