Node.js实践 | 青训营笔记

85 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 6 天

Node.js应用场景

  1. 前端工程化
  • Webpack,Vite,esbuild,Parcel
  • Babel,TypeScript => JS 转换
  • uglifyjs
  • ... (必不可缺)
  1. Web服务端应用

优势:SSR、生态链:V8 inspector、开发效率高学习较易

  • Next.js
  • Express
  • Egg.js
  1. Electron跨端桌面应用
  • Visual Studio Code
  • Zoom
  • QQ
  • 公司内部效率工具

Node.js运行时结构

image.png

  • V8: JS Runtime
  • libuv: 系统调用、时间循环

Node.js特点

  1. 异步I/O
  • 执行IO操作时,会在响应返回后恢复操作,而非阻塞占用额外内存
  1. 单线程

不太适合做CPU密集操作(使用Woker_thread)

  • JS线程 + uv线程池 + V8任务线程池 + V8 Inspector线程

  • 优点:不需要考虑多线程状态同步、锁等问题

  • 缺点:阻塞影响

  1. 跨平台
  • 封装不同操作系统统一API
  • 开发成本低

编写HTTP Server

以下均为伪代码

  1. 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... 
  1. 静态文件服务器

fs、path、http、url

url.parse(req.url)
const filestream = fs.createReadStream(filepath)
res.pipe(filestream)
  1. React SSR

优点:SSR相比SPA首屏渲染更快,SEO友好

缺点:qps较低,需要考虑服务端渲染情况

SSR难点:

  • 处理打包代码
  • 考虑前端代码在服务端运行时逻辑
  • 需移除对服务端无意义的副作用
React.createElement('div', {}, child)
{ReactDOMServer.renderToString()}
  1. inspector调试

V8 Inspector:与前端开发一致,跨平台

node启动时: node --inspect open http://locahost:9229/json

使用场景:

  • 查看console.log
  • 断点
  • 高CPU、死循环、内存占用
  • 性能分析
  1. 部署

pm2守护进程 cluster便于利用多进程、记录进程状态 容器环境 ...

总结

本次从了解Node.js使用场景入手,主要学习Node.js实战相关的内容(Http Server、SSR、调试、部署)等等,其中也分析了Node.js运行时结构,让我更深入了解Node.js整体结构。

图引用自github.com/joyeecheung…