这是我参与「第四届青训营」笔记创作活动的的第6天
NodeJS
NodeJS的应用场景
- 前端工程化
- Bundle:webpack,vite,esbuild,parcel
- Uglifu:ublifyjs
- Transpile:bablejs,typescript
- 其他语言加入竞争:esbuild,parcel,prisma
Web服务端应用
- 学习曲线平缓,开发效率较高
- 运行效率接近常见的编译语言
- 社区生态丰富及工具链成熟
- 与前端结合的场景会有优势
- 竞争激烈,Nodejs有自己独特的优势
Electron跨端桌面应用
- 商业应用:vscode,slack,discord,zoom
- 大型公司的效率工具
- 大部分场景在选型时都值得考虑
NodeJS运行时的结构
特点
异步I/O,会在响应返回后恢复操作,而不是阻塞线程并占用额外内存等待
单线程
- JS线程+uv线程池+v8任务线程池+v8inspector线程
- 优点:不用考虑多线程状态同步问题,也就不需要锁,还能比较高效的利用系统资源
- 缺点:阻塞会产生更多负面影响,一般采用多线程或多进程解决
跨平台
- Nodejs跨平台+JS无需编译环境+Web跨平台+诊断工具跨平台
- 开发成本低
Http Server
步骤
- 安装Nodejs
- 编写Http Server+Client,收发GET,POST请求
- 编写静态文件服务器
- 编写React SSR服务
- 使用inspector进行调试,诊断
- 部署简介
安装:
- Mac,Linux推荐使用nvm,多版本管理
- Windows推荐使用nvm4w或官方安装包
- 遇到安装过慢的情况下,设置安装源
SSR
- 相比传统HTML,避免重复编写代码
- 相比SPA,首屏渲染更快,SEO友好
- 缺点通吃qps较低,前端代码编写时需要考虑服务端渲染情况
V8inspector
开箱即用,特性丰富强大,与前端开发一致,跨平台
场景:
- 查看console.log
- breakpoint
- 高CPU,死循环:cpuprofile
- 高内存占用:heapsnapshot
- 性能分析
部署
- 部署需要解决的问题
- 守护进程:当进程退出时,重新挂起
- 多进程:cluster便捷的利用多进程
- 记录进程状态,用于诊断
容器环境
通常健康检查有手段,只需考虑多核CPU使用率
延伸话题
Nodejs贡献代码 好处
- 从使用者的角色逐步理解底层细节,可以解决更复杂的问题
- 自我证明,有助于职业发展
- 解决社区问题,促进社区发展
诊断/追踪
- 一个低频,重要,也相当有挑战的方向,是企业衡量自己能否依赖一门语言的重要参考
- 技术咨询行业中的热门角色
难点: 需要了解Node.js底层,需要了解操作系统以及各种工作 ,更需要经验