Node.js 20 —— 几个令人大开眼界的特性

2023-09-21 08:57:53

前言:欢迎来到 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:发展历程与应用前景解析

更多推荐

Redis快速入门及在Java中使用Redis

哈喽~大家好,这篇来看看Redis快速入门及在Java中使用Redis。🥇个人主页:个人主页​​​​​🥈系列专栏:【微服务】🥉与这篇相关的文章:SpringCloudSentinel使用SpringCloudSentinel使用_程序猿追的博客-CSDN博客SpringCloud网关GatewaySpringCl

Spring MVC 之MVC 体系结构、什么是SpringMVC

SpringMVC简介MVC体系结构三层架构MVC设计模式SpringMVC是什么?扩展知识Spring模块DataAccess/Integration(数据访问/集成)Web(网络层)AOP(面向切面)Messaging(消息传送)CoreContainer(核心容器)Test(测试层)Spring的7大优点MVC体

详细讲解什么是SpringMVC 映射请求数据

😀前言本文详细讲解什么是SpringMVC映射请求数据🏠个人主页:尘觉主页🧑个人简介:大家好,我是尘觉,希望我的文章可以帮助到大家,您的满意是我的动力😉😉在csdn获奖荣誉:🏆csdn城市之星2名⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣💓Java全栈群星计划top前5⁣⁣⁣⁣⁣⁣⁣

xss跨站脚本攻击

本文是对xss跨站脚本攻击的相关介绍,希望这篇文章能让你不仅有一定的收获,而且可以愉快的学习,如果有什么建议,都可以留言和我交流1.xss定义XSS全称(CrossSiteScripting)跨站脚本攻击,XSS属于客户端攻击,受害者最终是用户,但特别要注意的是网站管理人员也属于用户之一。这就意味着XSS可以进行“服务

Java面试之SpringBoot篇

每日一面之Boot篇:讲一讲SpringBoot的自动装配吧面试是一个短时交流的过程,这个过程中包涵首因效应的管理,晕轮效应的管理,如何做好面试管理对求职者至关重要。作为Java的学者,面试题是面试官考量我们的一个基本标准,尤其是对于没有实际项目经验的大学生,本专栏专门针对一切比较常见的问题做出整理,欢迎各位投稿、订阅

three.js 入门 初识

基本步骤:初始设置创建场景创建相机创建可见对象创建渲染器渲染场景安装npminstallthree引入import*asTHREEfrom"three";一、three三要素:场景、相机、渲染1.场景://创建场景constscene=newTHREE.Scene()2.相机:OrthographicCamera正交投

【前端设计模式】之工厂模式

工厂模式特性工厂模式是一种创建对象的设计模式,它通过使用工厂类来封装对象的创建逻辑,隐藏了具体对象的实例化过程。工厂模式的主要特性包括:封装对象的创建过程:工厂模式将对象的创建过程封装在一个工厂类中,客户端只需要通过调用工厂类的方法来获取所需的对象,而无需关心具体的实例化过程。提供统一的接口:工厂模式通常会定义一个统一

BIO、NIO、AIO有什么区别

什么是IOJava中I/O是以流为基础进行数据的输入输出的,所有数据被串行化(所谓串行化就是数据要按顺序进行输入输出)写入输出流。简单来说就是java通过io流方式和外部设备进行交互。在Java类库中,IO部分的内容是很庞大的,因为它涉及的领域很广泛:标准输入输出,文件的操作,网络上的数据传输流,字符串流,对象流等等等

基于招聘网站的大数据专业相关招聘信息建模与可视化分析

需要本项目的可以私信博主!!!在大数据时代背景下,数据积累导致大数据行业的人才需求快速上升,大量的招聘信息被发布在招聘平台上。深入研究这些信息能帮助相关人士更好地理解行业动态,并对其未来发展进行预测。本文主要通过分析51job网站上的大数据职位招聘信息,进行一次可视化的呈现。本研究首先使用Python爬虫技术,抓取51

Kubernetes中Pod的扩缩容介绍

Kubernetes中Pod的扩缩容介绍在实际生产系统中,我们经常会遇到某个服务需要扩容的场景,也可能会遇到由于资源紧张或者工作负载降低而需要减少服务实例数量的场景。此时可以利用Deployment/RC的Scale机制来完成这些工作。Kubernetes对Pod的扩缩容操作提供了手动和自动两种模式,手动模式通过执行k

零基础学前端(五)模仿QQ官网首页(重点练习HTML+CSS)

1.我前面已经将HTML和CSS讲解完成,希望初学者是跟着一步一步敲代码走过来的。2.我个人觉得先不着急进入Javascript的学习,要将前面写样式,写布局的基础打好,所以我编写了本篇模仿QQ网站首页,请认真阅读。一、确认目标我们要模仿qq官网的首页。你可以点击去看看官网的样子,我将目标图片先贴在下面。素材可以自己通

热文推荐