认识Node.js | 青训营笔记

113 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第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线程
    • 优点:不用考虑多线程状态同步问题,也就不需要锁;同时还能比较高效地利用系统资源;
    • 缺点:阻塞会产生更多负面影响
      • 解决办法:多进程或多线程
  • 跨平台 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 中看到代码运行过程