这是我参与「第四届青训营 」笔记创作活动的第7天
node.js的应用场景
1.前端工程化
做前端开发的工具和框架,实现在浏览器之外跑js的代码,调用操作系统的api
2.Web服务端应用
可以做传统后端语言可以做的事情
3.Electron跨段桌面应用
node.js的运行时结构
组成
-
acron、node-inspect(用作调试)都是 npm包
-
业务代码,其中用到的npm包的代码也算用户代码
-
V8:JavaScript Runtime,诊断调试工具(inspector)
-
libuv:eventloop(事件循环), syscall (系统调用)
特点
1.异步I/O
当Node.js执行I/O操作时,会在响应返回后恢复操作,而不是阻塞线程并占用额外内存等待。
2.单线程
- JS 单线程
实际:JS线程+uv线程池+V8任务线程池+V8 Inspector线程
优点:不用考虑多线程状态同步问题,也就不需要锁;同时还能比较高效地利用系统资源
缺点:阻塞会产生更多负面影响
解决办法:多进程或多线程
3.跨平台
- 跨平台(大部分功能、api)
Node.js跨平台+JS无需编译环境(+ Web 跨平台+诊断工具跨平台) =开发成本低(大部分场景无需担心跨平台问题),整体学习成本低
编写 Http Server
安装Node.js
Mac,Linux推荐使用nvm。多版本管理。
Windows推荐 nvm4w 或是官方安装包。
安装慢,安装失败的情况,设置安装源 NVM_NODEJS_ORG_MRROR=npmmirror.com/mirrors/nod… nvm install 16 Http Server
静态文件
React SSR
Debug
V8 Inspector:开箱即用、特性丰富强大、与前端开发一致、跨平台
- node --inspect
- open http://localhost:9229/json 场景:
查看console.log内容 breakpoint 高CPU、死循环:cpuprofile 高内存占用:heapsnapshot 性能分析 部署
部署要解决的问题:
1.守护进程:当进程退出时,重新拉起 2.多进程:cluster便捷地利用多进程 3.记录进程状态,用于诊断
容器环境:
- 通常有健康检查的手段,只需考虑多核 cpu 利用率即可
延伸话题
- Node.js贡献代码
- 编译Node.js
- 诊断/追踪
- WASM,NAPI