这是我参与「第四届青训营 」笔记创作活动的的第14天
一.Node.js的应用场景
1.前端工程化的场景。
早期 ajax, jquery 比较流行的时候,我们直接在页面中引入需要的 lib 即可。后续随着模块化、transpile 逐渐成熟、需求逐渐增多,对后端能力的需求也逐渐强烈。也正是 Node.js 赋予了 js 开发者在浏览器外运行代码的能力,加速催生了这些项目的出现。
2.Web 服务端应用
也就是后端服务。这里我们特别提一下 vercel 这家公司
- Electron 应用
这里不只是指 electron,还包括 nw.js.. ; 这个场景在较大的企业里面非常常见。
4.字节运用现状
二.Node.js运行时的结构
V8: JavaScript Runtime,诊断调试工具(inspector)
libuv: eventloop (事件循环),syscall (系统调用)
举例:用node- fetch发起请求时,
特点:
1.异步IO
当Node.js执行IO操作时,会在响应返回后恢复操作,而不是阻塞线程
并占用额外内存等待
2.单线程
实际:
JS线程+uV线程池+V8任务线程池+V8Inspector线程
优点:
不用考虑多线程状态同步问题,也就不需要锁;同时还能比较高效地利用系统资源;
缺点:
阻塞会产生更多负面影响
解决办法:
多进程或多线程
3.跨平台
- 跨平台(大部分功能、api)
- Node.js跨平台+ JS无需编译环境(+ Web跨平台+诊断工具跨平台)
-
- =开发成本低(大部分场景无需担心跨平台问题) ,整体学习成本低