Node.js 与前端开发实战 | 青训营笔记

94 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第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)

Snipaste_2022-08-14_21-30-45.png

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的一个实战,老师也给出了一些建议与拓展阅读.