nodejs入门 | 青训营笔记

82 阅读2分钟

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

node.js的应用场景

1.前端工程化

做前端开发的工具和框架,实现在浏览器之外跑js的代码,调用操作系统的api

image.png

2.Web服务端应用

可以做传统后端语言可以做的事情

image.png 3.Electron跨段桌面应用

image.png

image.png

node.js的运行时结构

image.png 组成

  • acron、node-inspect(用作调试)都是 npm包

  • 业务代码,其中用到的npm包的代码也算用户代码

  • V8:JavaScript Runtime,诊断调试工具(inspector)

  • libuv:eventloop(事件循环), syscall (系统调用)

特点

1.异步I/O

当Node.js执行I/O操作时,会在响应返回后恢复操作,而不是阻塞线程并占用额外内存等待。

image.png 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

image.png

image.png

image.png 静态文件

image.png React SSR

image.png

Debug

V8 Inspector:开箱即用、特性丰富强大、与前端开发一致、跨平台

查看console.log内容 breakpoint 高CPU、死循环:cpuprofile 高内存占用:heapsnapshot 性能分析 部署

部署要解决的问题:

1.守护进程:当进程退出时,重新拉起 2.多进程:cluster便捷地利用多进程 3.记录进程状态,用于诊断

容器环境:

  • 通常有健康检查的手段,只需考虑多核 cpu 利用率即可

延伸话题

  • Node.js贡献代码
  • 编译Node.js
  • 诊断/追踪
  • WASM,NAPI