这是我参与「第五届青训营 」伴学笔记创作活动的第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操作时,会在响应返回后恢复操作,而不是阻塞线程并占用额外内存等待。
单线程
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()方法用于加载模块