这是我参与「第五届青训营 」伴学笔记创作活动的第 6 天
Node.js应用场景
前端工程化
- Webpack,Vite,esbuild,Parcel
- Babel,TypeScript => JS 转换
- uglifyjs
- ... (必不可缺)
Web服务端应用
优势:SSR、生态链:V8 inspector、开发效率高学习较易
- Next.js
- Express
- Egg.js
Electron跨端桌面应用
- Visual Studio Code
- Zoom
- 公司内部效率工具
Node.js运行时结构
- V8:
JS Runtime libuv: 系统调用、时间循环
Node.js特点
异步I/O
- 执行IO操作时,会在响应返回后恢复操作,而非阻塞占用额外内存
单线程
不太适合做CPU密集操作(使用Woker_thread)
-
JS线程 + uv线程池 + V8任务线程池 + V8 Inspector线程
-
优点:不需要考虑多线程状态同步、锁等问题
-
缺点:阻塞影响
跨平台
- 封装不同操作系统统一API
- 开发成本低
编写HTTP Server
以下均为伪代码
- Http Server + Client
require('http')
const server = http.createServer ((req, res) => {
res.end('...')
})
server.listen(port, () => {
})
req.on(data
req.on(end
res.setHeader('Contene-Type', 'application/json')
http.request...
- 静态文件服务器
fs、path、http、url
url.parse(req.url)
const filestream = fs.createReadStream(filepath)
res.pipe(filestream)
- React SSR
优点:SSR相比SPA首屏渲染更快,SEO友好
缺点:qps较低,需要考虑服务端渲染情况
SSR难点:
- 处理打包代码
- 考虑前端代码在服务端运行时逻辑
- 需移除对服务端无意义的副作用
React.createElement('div', {}, child)
{ReactDOMServer.renderToString()}
- inspector调试
V8 Inspector:与前端开发一致,跨平台
node启动时: node --inspect
open http://locahost:9229/json
使用场景:
- 查看console.log
- 断点
- 高CPU、死循环、内存占用
- 性能分析
- 部署
pm2守护进程 cluster便于利用多进程、记录进程状态 容器环境 ...
总结
本次从了解Node.js使用场景入手,主要学习Node.js实战相关的内容(Http Server、SSR、调试、部署)等等,其中也分析了Node.js运行时结构,让我更深入了解Node.js整体结构。