服务器端 JavaScript 平台 Node.js 21.0 可用

Node.js 21.0 发布,这是一个用 JavaScript 运行网络应用程序的平台。 Node.js 21.0 分支的支持期为 6 个月。 未来几天,Node.js 20 分支的稳定工作将完成,该分支将获得 LTS 状态并支持到 2026 年 18.0 月。 Node.js 2025 之前的 LTS 分支的维护将持续到 16.0 年 2024 月,前年的 LTS 分支 XNUMX 的维护将持续到 XNUMX 年 XNUMX 月。

主要改进:

  • Fetch API 已被宣布稳定,旨在通过网络加载资源并简化适用于服务器和客户端的通用 JavaScript 代码的编写。 该实现基于 HTTP/1.1 undici 客户端的代码,并尽可能接近浏览器中提供的类似 API。 该 API 包括 fetch() 方法和 Headers 对象。 Request和Response,分别代表HTTP头、请求和响应。 const res = wait fetch('https://nodejs.org/api/documentation.json'); if (res.ok) { const data = wait res.json(); 控制台.log(数据); }
  • 对 WebStreams API 的支持已经稳定,该 API 提供对通过网络接收的数据流的访问。 该 API 使您可以添加自己的处理程序,这些处理程序可以在信息通过网络到达时处理数据,而无需等待整个文件下载完毕。 Node.js 中可用的对象包括 ReadableStream*、TransformStream*、WritableStream*、TextEncoderStream、TextDecoderStream、 CompressionStream 和 DecompressionStream。
  • 添加了WebSocket客户端的实验性实现,兼容浏览器。 为了启用 WebSocket 支持,提供了“--experimental-websocket”标志。
  • 添加了使用 JavaScript 模块 ESM(ECMAScript 模块,用于浏览器模块)的默认实现而不是 CommonJS(特定于 Node.js)的实验模式。 此更改不会影响通过 package.json 中的“type”字段显式定义格式、通过“--input-type”标志指定的模块,或者由于文件扩展名而显而易见的模块(ESM 为 .mjs,.cjs对于 CommonJS)。 但是,启用新模式时,未明确定义为 CommonJS 的模块(例如,具有“.js”扩展名)将被视为 ESM 模块。 为了激活新的模块设置,建议使用“--experimental-default-type”标志。
  • V8 引擎已更新至版本 11.8,在 Chromium 118 中使用,现在支持 ArrayBuffer.prototype.transfer 方法、对数组进行分组的功能(groupBy 方法)以及用于处理常量的 WebAssembly 指令(i32.add、i32.sub、 i32.mul、i64.add、i64.sub 和 i64.mul)。
  • 对 globalPreload 处理程序的支持已停止,转而支持注册和初始化对配置模块的调用。
  • fs.writeFile 函数中添加了“flush”选项,以强制在每次写入操作后将数据刷新到驱动器。
  • 改进了与 URL 解析、获取 API、流、node:fs 和 HTTP 相关的代码的性能。
  • 添加了全局导航器对象。 例如,要获取有关 CPU 核心数量的数据,您可以使用 navigator.hardwareConcurrency 属性。
  • 在“—test”参数中,添加了对全局掩码的支持,用于选择要运行的测试(例如,您可以指定“—test **/*.test.js”)。
  • 捆绑包管理器 npm 10.2.0 和 llhttp 解析器已更新。
  • 对 Visual Studio 2019 和 11.0 之前的 macOS 版本的支持已停止。

Node.js 平台既可用于 Web 应用程序的服务器维护,也可用于创建常规的客户端和服务器网络程序。 为了扩展 Node.js 应用程序的功能,准备了大量模块,您可以在其中找到实现 HTTP、SMTP、XMPP、DNS、FTP、IMAP、POP3 服务器和客户端的模块,以及用于集成的模块具有各种 Web 框架、WebSocket 和 Ajax 处理程序、DBMS 连接器(MySQL、PostgreSQL、SQLite、MongoDB)、模板引擎、CSS 引擎、加密算法和授权系统 (OAuth) 的实现、XML 解析器。

为确保处理大量并行请求,Node.js 使用基于非阻塞事件处理和回调处理程序定义的异步代码执行模型。 支持的多路复用连接方法有 epoll、kqueue、/dev/poll 和 select。 对于连接多路复用,使用了 libuv 库,它是 Unix 系统上的 libev 和 Windows 上的 IOCP 的附加组件。 使用libeio库创建线程池,集成c-ares以非阻塞方式进行DNS查询。 所有导致阻塞的系统调用都在线程池内部执行,然后像信号处理程序一样,通过一个未命名的管道(pipe)将它们的工作结果传回。 JavaScript 代码的执行是通过使用由谷歌开发的 V8 引擎提供的(此外,微软正在开发一个带有 Chakra-Core 引擎的 Node.js 版本)。

Node.js 的核心类似于 Perl AnyEvent、Ruby Event Machine、Python Twisted 框架和 Tcl 事件实现,但 Node.js 中的事件循环对开发人员是隐藏的,类似于运行中的 Web 应用程序中的事件处理在浏览器中。 在为 node.js 编写应用程序时,您需要考虑事件驱动编程的细节,例如,而不是执行“var result = db.query("select..");” 等待工作完成和后续处理结果,Node.js采用了异步执行的原理,即代码被转换为“db.query(“select..”, function (result) {result processing});”,其中控制将立即传递给进一步的代码,查询结果将在数据到达时进行处理。

来源: opennet.ru

添加评论