NodeJs | 青训营笔记

73 阅读2分钟

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

本堂课的重点内容

01 Node.js的应用场景
02 Node.js运行时结构
03 编写HTTP Server

Node.js的应用场景

01 前端工程化
02 Web服务端应用
03 Electron跨端桌面应用
......

前端工程化

Bundle:webpack,vite,esbuild,parcel
Uglify:uglifyjs
Transpile:bablejs,typescript
其他语言加入竞争:esbuild,parcel,prisma
现状:难以替代

Web服务端应用

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

Electro跨端桌面应用

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

Node.js运行时结构————特点

01 异步IO
02 单线程
03 跨平台

异步IO

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

image.png

单线程

JS单线程
    实际:JS线程+uv线程池+V8任务线程池+V8 Inspector线程
优点:不用考虑多线程状态同步问题,也就不需要锁;同时还能比较高效利用系统资源。
缺点:阻塞会产生更多负面影响
    解决方法:多进程和多线程

跨平台

Node.js跨平台+JS无需编译环境(+Web跨平台+诊断工具跨平台)
=开发成本低,整体学习成本低

Nodejs模块化

1.内置模块 nodejs官方提供
2.自定义模块 用户创建的.js文件
3.第三方模块 使用前需下载,第三方开发的模块

模块作用域

在自定义模块定义的变量、方法等成员,只能在当前模块被访问,
优点: 防止全局变量污染问题

模块化规范

1.nodejs遵循CommonJS模块化规范 CommonJS规定了模块的特性和各模块间如何相互依赖
2.每个模块内部,module变量代表当前模块
3.module变量是一个对象,它的exports属性是对外的接口
4.加载某个模块是加载module.exports属性,require()方法用于加载模块