Node.js 与前端 | 青训营笔记

151 阅读2分钟

这是我参与「第四届青训营」笔记创作活动的的第 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 跨平台等。