目录
- 介绍
- 首次用户
- 技术特点
- 竞品
- 进一步阅读
介绍
Node.js 是一个开源、跨平台、异步事件驱动,基于 V8 引擎的 JavaScript 运行时环境,于 2009 年由 Ryan Dahl 创造,目的是为了实现高性能的网络应用开发。
- 性能表现良好:使用事件驱动和非阻塞 I/O 模型,能够处理大量的并发请求;使用单线程模型,避免了多线程编程的复杂性和开销。
- 应用范围:适用于开发实时通信,数据流处理,微服务架构等类型的应用。
- 资源丰富:拥有一个庞大的生态系统和丰富的库,可根据需要使用 npm (Node Package Manager) 等包管理工具让不同库来增强应用程序的整体功能。
首次用户
-
使用
x node
即可自动下载并使用- 在终端运行
eval "$(curl https://get.x-cmd.com)"
即可完成 x 命令安装, 详情参考 x-cmd 官网
- 在终端运行
-
x-cmd 提供1分钟教程,其中包含了 node 命令常用功能的 demo 示例,可以帮你快速上手 node 。
-
使用案例:
# 运行 node 脚本 $ x node hello-world.js# 使用 node 从 stdin 读取数据并进行处理 $ echo '{"hello":"world"}' | x node process-stdin.js# 获取使用 node 命令传入参数 $ x node process-argv.js hello world# 搭建一个简单的服务器 $ x node http-app.js
技术特点
- 事件驱动和非阻塞 I/O,是 Node.JS 最为显著的特点
- 通过事件循环机制,Node.js 能够在单个线程中处理多个并发操作,避免了阻塞,使得高并发应用的性能得到提升。
- Node.js 采用著名的 libuv 作为异步 IO 的底层实现
- 异步回调型写法给流程式开发带来一定的困扰,JS则逐渐在其语言标准引入了 Promise 和 Async/Await,以改进开发体验。
- 易于迁移的运行时:
- Node.js 本身是一个轻量级的运行时环境,它专注于执行 JavaScript 代码,并提供了一些基本的 API,使得开发者能够构建高效的网络应用。
- 相比大部分的语言 Runtime,NodeJS 只依赖系统的 std c 库,除此之外不作任何依赖要求。该特性使其运行时安装异常简单。
- 快速启动和响应:
- Node.js 使用浏览器所使用的 V8 引擎来执行 JavaScript 代码,继承了在启动速度和响应时间的优势。这对于调试和部署应用时非常快捷便利。
- 在早期的 Node.js 版本,Node.js 的启动时间逊于 Python 这类老牌语言。如果需要加载较多的第三方库,启动时间会进一步增加。但自从v10版本开始,Node.js在启动时间和加载都有较大的改进,达到正常水平。
- 庞大的生态和第三方库
- 由于 Node.js 的开放性、npm 社区的努力以及社区的活力,Node.js 现在拥有体量庞大的生态
- Node.js 的大部分库都比较小型,因此容易造成碎片化,从而增加了第三方库的安装时间,以及运行时的首启加载时间。
- 关于第三方库的安装加速,存在很多针对 npm-cli 的第三方的优化方案,例如最早的 yarn,后面的 pnpm。最近的 bun 也提出了兼容 node 的 包安装工具,并给出了最高 25 倍的提速。其在最近发布正式版,让我们拭目以待。
- 关于首启加载时间的优化方法有很多,例如用 webpack ,将所有的库与项目代码打包到单文件。而在最近的 Node.js 版本,在加载速度也有很大的提升。
竞品
- deno 是一个由 Node 原作者采用 Rust 开发,源于对 Node.js 中某些设计决策的重新思考和改进。x-cmd 也引入了 deno,有兴趣的读者可以参考 x-cmd pkg deno。
- bun 由 Jarred Sumner 在 2021年使用 Zig 开发。但不同于 node 和 deno 基于 Chrome 项目的 V8引擎,bun 使用 JavaScriptCore 引擎。x-cmd 也引入了 bun,有兴趣的读者可以参考 x-cmd pkg bun。
进一步阅读
- 关于 x-cmd 对于 node 在命令行使用中进行的增强扩展,具体可以查看: module for node