这是我参与「第四届青训营 」笔记创作活动的第21天
Node.js 的应用场景(why)
前端工程化
早期的jQuery等库都是直接在页面中引入,后来模块化逐渐成熟,Node.js赋予了开发者在浏览器外运行代码的能力,前端逐渐模块化、
Bundle:webpack、Vite、esbuild、Parcel等
Uglify:UglifyJS
Transplie:babeljs、TypeScript
个人理解:Transplie就是将ES6这样最新的语法转译成低版本的写法,实现浏览器兼容
其他语言加入前段工程化的竞争:esbuild、Parcel 、prisma等
现状:Node.js难以替代
Web服务端应用
学习曲线平缓,开发效率较高
运行效率接近常见的编译语言
社区生态丰富及工具链成熟(npm,V8 inspector)
与前端结合的场景会有优势(SSR,同构前端应用。 编写页面 和 后端数据的获取和填充都由 JavaScript 来完成)
现状:竞争激烈,Node.js 有自己独特的优势
Electron跨端桌面应用
商业应用: vscode、slack、discord、zoom
大型公司内的效率工具
现状:大部分场景在选型时,都值得考虑
Node.js运行时结构(what)
N-API:用户代码中利用npm安装的一些包
V8:JavaScript Runtime,诊断调试工具(inspector)
libuv:eventloop (事件循环),syscall (系统调用)
举例:用node-fetch发起请求时
整个过程中底层会调用非常多的c++代码
特点
异步I/O:
setTimeout(() => {
console.log('B');
})
console.log('A');
JS单线程
实际:JS线程 + uv线程池(4个线程) + V8任务线程池 + V8 Inspector线程 优点:不用考虑多线程状态同步问题,也就不需要锁。同时还能比较高效地利用系统资源;
缺点:阻塞会产生更多负面影响、异步问题、延时有要求的场景需要考虑。
解决办法:多进程或多线程 跨平台(大部分功能、api)
本节课从Node.js介绍起,实现了其编写Http Server的一个实战,老师也给出了一些建议与拓展阅读.