这是我参与「第五届青训营 」伴学笔记创作活动的第10天。
01.Node.js 的应用场景(why)
- 前端工程化、Web服务端应用、Electorn跨端桌面应用
前端工程化
- Bundle: webpack, vite, esbuild, parcel
- Uglify: uglifyjs
- Transpile: bablejs, typescript
- 其他语言加入竞争:esbuild,parcel,prisma
- 现状:难以替代
Web服务端应用
- 学习曲线平缓,开发效率较高
- 运行效率接近常见的编译语言
- 社区生态丰富及工具链成熟(npm,V8 inspector)
- 与前端结合的场景会有优势(SSR)
- 现状:竞争激烈,Node.js有自己独特的优势
Electron跨端桌面应用 效率高、稳定 商业应用:vscode,slack,discord,zoom 大型公司内的效率工具 现状:大部分场景在选型时,都值得考虑
应用场景
- Node.js在字节
- BFF应用、SSR应用,举例:Modern.js
- 服务端应用,举例:头条搜索,西瓜视频,懂车帝
- Electron应用:飞连,飞书
- 每年新增1000+Node.js应用
02.Node.js 运行时结构(what)
本身特点
V8:JavaScript Runtime,诊断调试工具(inspector) libuv:eventloop(事件循环),syscall(系统调用) 举例:用node-fetch发起请求时
异步I/O: 执行能操作时,响应返回后恢复操作,而不是阻塞线程并占用额外内存等待。
单线程: JS线程 + uv线程池 + V8任务线程池 + V8 Inspector线程
单线程不用考虑状态同步问题,不需要锁还能高效利用系统资源但阻塞会产生更多负面影响。
跨平台: Node.js跨平台 + JS无需编译环境(+ Web跨平台 + 诊断工具跨平台)开发成本低,整体学习成本低(大部分场景无需担心跨平台问题)
03.编写 Http Server (how)
本节目标 0.安装 Node.js
- 编写 Http Server + Client, 收发 GET,POST 请求 2.编写静态文件服务器 3.编写 React SSR 服务 4.适用 inspector 进行调试、诊断 5.部署简介
SSR 有什么特点?
- 相比传统 HTML 模版引: 避免重复编写代码相比 SPA (single page application) : 首屏染更快,SEO 友好
- 缺点:通常 qps 较低,前端代码编写时需要考虑服务端渲染情况
** 难点:**
- 需要处理打包代码
- 需要思考前端代码在服务端运行时的逻辑
- 移除对服务端无意义的副作用,或重置环境