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