这是我参与「第四届青训营 」笔记创作活动的第10天。
后续持续更新,后续会去系统的看一下node是怎么写的,这里显示简单认识一下
Node.js的应用场景
-
前端工程化
- 打包工具类:
webpack,vite。。。 - Uglify:uglifyjs
- Transpile:bablejs,typescript
- 其他语言加入竞争:基于go实现的ebuild,基于rust实现的parcel,prisma
- 打包工具类:
-
web服务端应用
Nodejs和传统后端比起来具有一些优势
- 学习效率平缓,开发效率高
- 运行效率接近常见的编程语言
- 社区生态丰富及工具链成熟(npm,V8 inspector)
- 与前端结合的场景会有优势(SSR)
最主要的是,他的学习成本相对去其他的服务器语言来说,会低一点
-
Electro跨端桌面应用
- 商业应用:vscode, slack, discord, zoom等等的桌面应用都是用Electron开发的
- 大型公司的效率工具,大部分都是基于 Electron 做
Node.js运行时环境
Nodejs运行时结构特点
-
异步
当Node.js执行I/O操作时,会在响应返回后恢复操作,而不是阻塞线程并占用额外的内存等待
sequenceDiagram participant A as ReadFile() participant J as Node participant K as others A->>+J: 异步调用 A->>+K: 其他调用 activate J activate A J-->>-A: 返回数据 deactivate J deactivate A K-->>-A: 返回数据 activate A deactivate A当调用异步API(fs.readFile())读取文件时,会把读取文件的操作交给
libuv的线程池去做,此时就不用等到文件读取完,就可以做其他调用,之后文件读取的操作从node线程处理完返回给主线程执行回调,然后在做其他事情 -
单线程
实际:JS线程+ uv线程 +V8任务线程池 + V8 Inspector线程
-
优点:不用考虑多线程状态同步问题,也就不需要锁;同时还能比较有效的利用系统资源
-
缺点:阻塞会产生更多的负面影响
解决问题:多线程或多进程
-
-
跨平台
-
跨平台(大部分功能,api)
-
Node.js跨平台+JS无需编译环境(+web跨平台+诊断工具跨平台)
这就意味着,开发成本低(大部分场景无需担心跨平台问题),整体学习成本低
-
编写Http Server
-
安装Node.js
-
编写
- 首先先引入
required模块,用来载入http模块 - 创建服务器,我们需要引入
http.createServer() - 并使用
listen方法来绑定端口号,通过reponse和request来接受和响应数据res.end()就是用来发送响应数据的
const http = require('http') const server = http.createServer((req, res) => { res.end('hello') }).listen(3000) console.log('Server running at http://127.0.0.1:3000/');这样启动后我们就可以在3000端口上看到hello
- 首先先引入