这是我参与「第五届青训营 」伴学笔记创作活动的第8天
Node.js 的应用场景
前端工程化
Bundle(如webpack,vite,esbuild,parcel)
Uglify(uglifyjs)
ranspile(bablejs,typescript)
其他语言(如esbuild,parcel,prisma)
Web服务端应用
学习曲线平缓,开发效率较高
运行效率接近常见的编译语言
社区生态丰富及工具链成熟(npm,V8 inspector)
与前端结合的场景会有优势(SSR)
Electron跨端桌面应用
官网:www.electronjs.org/
商业应用(如vscode,slack,discord,zoom)
大型公司内的效率工具
Node.js运行时结构
可参考文献:github.com/joyeecheung…
Node.js 结构特点:
- 异步性
当Node.js执行I/O操作时,会在响应返回后恢复操作,而不是阻塞线程并占用额外内存等待
-
单线程
- JS单线程
- 实际:JS线程+uv线程池+V8任务线程池+V8 Inspector线程
- 优点:不用考虑多线程状态同步问题,也就不需要锁;同时还能比较高效地利用系统资源;
- 缺点:阻塞会产生更多负面影响
- 解决办法:多进程或多线程
- JS单线程
-
跨平台 Node.js跨平台 + JS无需编译环境(+ Web跨平台 + 诊断工具跨平台)= 开发成本低(大部分场景无需担心跨平台问题),整体学习成本低
安装Node.js
安装NVM:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash
通过nvm安装Node.js:nvm install node
Mac,Linux——推荐使用nvm,方便管理多个版本
Windows——推荐nvm4w或官方安装包
也可以使用镜像站点——nvm_nodejs_org_mirror
编写Http Server
HTTP 模块:可以使用http.createServer()方法创建一个 HTTP 服务器,也可以使用http.request()方法创建一个 HTTP 客户端
创建一个简单的服务端:练习示例
const http = require('http')
const server = http.createServer((req,res) => {
res.end('hahaha')
})
const port = 3000
server.listen(port, () => {
console.log('listening on:', port)
})
回到浏览器查看回应,开发者工具 - network - localhost 中看到代码运行过程