NodeJS学习总结 | 青训营笔记

89 阅读2分钟

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

NodeJS

NodeJS的应用场景

  • 前端工程化
  • Bundle:webpack,vite,esbuild,parcel
  • Uglifu:ublifyjs
  • Transpile:bablejs,typescript
  • 其他语言加入竞争:esbuild,parcel,prisma

Web服务端应用

  • 学习曲线平缓,开发效率较高
  • 运行效率接近常见的编译语言
  • 社区生态丰富及工具链成熟
  • 与前端结合的场景会有优势
  • 竞争激烈,Nodejs有自己独特的优势

Electron跨端桌面应用

  • 商业应用:vscode,slack,discord,zoom
  • 大型公司的效率工具
  • 大部分场景在选型时都值得考虑

NodeJS运行时的结构

image.png

特点

异步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底层,需要了解操作系统以及各种工作 ,更需要经验