这是我参与「第四届青训营」笔记创作活动的的第 12 天
Node.js 的应用场景
前端工程化
如打包工具(Bundle):webpack、vite、esbuild、parcel
压缩工具(Uglify):uglifyjs
转译工具(Transpile):babel、TypeScript
在前端工程化方面,由于 JavaScript 的性能问题,有其他的语言加入竞争,如 esbuild 采用 Go 语言构建、parcel 采用 Rust 语言构建等等。但前端工程化中 Node.js 的地位仍然难以替代。
Web 服务端应用
Node.js 开发服务端应用的优势:
- 学习曲线平缓,开发效率高
- 运行效率接近常见的编译语言
- 社区生态丰富以及成熟的工具链
- 与前端结合的场景如 SSR 会更有优势
Web 服务端应用的市场仍然竞争激烈,而 Node.js 因为可以与前端共用代码而具有独特的优势。
Electron 跨端桌面应用
在一些商业应用如 VSCode、Slack、Discord 中有使用。
Electron 类的工具由于开发效率高,也会被作为大型公司内协作工具的开发技术。
大部分场景在选型时都值得考虑。
Node.js 运行时结构
异步 I/O
当 Node.js 执行 I/O 操作时,会在响应返回后恢复操作,而不是阻塞线程并占用额外内存。
单线程
JavaScript 是单线程的,但实际上是指 JavaScript 的主线程是单线程的,运行环境中还会有其他的线程存在。
实际上会存在的线程:JavaScript 线程 + UV 线程池,V8 任务线程池 + V8 Inspector 线程。
优点:不用考虑多线程的状态同步问题,也就不需要锁,同时还能比较高效地利用系统资源。
缺点:阻塞会产生更多负面影响。解决方法:多进程或多线程。
跨平台
Node.js 的大部分 API 都是跨平台的。
除了 Node.js 本身跨平台以外,还有许多特性可以使得开发成本降低,如:JavaScript 无需编译环境、Web 跨平台等。