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

Node.js 20.0 已经发布,这是一个用 JavaScript 执行网络应用程序的平台。 Node.js 20.0 已经被分配到长期支持分支,但这个状态要等到 20 月稳定后才能分配。 Node.js 30.x 将在 2026 年 18 月 2025 日之前得到支持。 之前的 Node.js 16.x LTS 分支维护将持续到 2023 年 14 月,之前的 30.x LTS 分支维护到 19 年 1 月。 XNUMX.x LTS 分支将于 XNUMX 月 XNUMX 日停用,Node.js XNUMX.x 临时分支将于 XNUMX 月 XNUMX 日停用。

主要改进:

  • V8 引擎已更新到版本 11.3,用于 Chromium 113。与使用 Chromium 19 引擎的 Node.js 107 分支相比,String.prototype.isWellFormed 和 toWellFormed 函数的变化中,Array.prototype和 TypedArray.prototype 方法,用于处理 Array 和 TypedArray 对象更改时的副本,RegExp 中的“v”标志,支持调整 ArrayBuffer 的大小和增加 SharedArrayBuffer 的大小,WebAssembly 中的尾调用。
  • 提出了一种实验性的权限模型机制,允许您在执行期间限制对某些资源的访问。 通过在运行时指定“--experimental-permission”标志来启用权限模型支持。 在最初的实现中,提出了一些选项来限制写入(--allow-fs-write)和读取(--allow-fs-read)访问 FS 的某些部分,子进程(--allow-child-process) ,附加组件(--no-addons)和线程(--allow-worker)。 例如,要允许写入 /tmp 目录并读取 /home/index.js 文件,您可以指定:node --experimental-permission --allow-fs-write=/tmp/ --allow-fs-read =/home/index.js 索引.js

    要检查访问权限,建议使用 process.permission.has() 方法,例如“process.permission.has('fs.write',”/tmp/test”)。

  • 通过“--experimental-loader”选项加载的 ECMAScript 外部模块 (ESM) 的处理程序现在在一个单独的线程中执行,与主线程隔离,这消除了应用程序代码和加载的 ESM 模块的交集。 与浏览器类似,import.meta.resolve() 方法现在在从应用程序内调用时同步执行。 在 Node.js 的下一个分支中,ESM 加载支持计划移至稳定功能类别。
  • node:test (test_runner) 模块旨在创建和运行以 TAP(测试任何协议)格式返回结果的 JavaScript 测试,已移至稳定版。
  • 一个单独的性能团队已经成立,为新分支做准备,致力于加速各种运行时组件,包括 URL 解析、fetch() 和 EventTarget。 例如,初始化 EventTarget 的开销减半,URL.canParse() 方法的性能得到显着提升,定时器的效率得到提升。 此外,发布的高性能URL解析器——Ada 2.0,用C++编写,也包含在组合中。
  • 以单个可执行文件(SEA,Single Executable Applications)的形式交付应用程序的实验性功能的开发仍在继续。 现在创建可执行文件需要替换从 JSON 配置文件生成的 blob(而不是替换 JavaScript 文件)。
  • 改进了 Web Crypto API 与其他项目实现的兼容性。
  • 在 ARM64 系统上添加了对 Windows 的官方支持。
  • 继续支持用于创建独立 WebAssembly 应用程序的 WASI(WebAssembly 系统接口)扩展。 不再需要指定一个特殊的命令行标志来启用 WASI 支持。

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

添加评论