这是我参与「第四届青训营 」笔记创作活动的第8天
Node.js
01.认识Node.js
Node.js是一个基于Chrome V8引擎(进行代码解释)的Javascript运行环境(平台),不是js框架。
简单的说 Node.js 就是运行在服务端的 JavaScript。
02.Node.js的应用场景
前端工程化
早期 ajax, jquery 比较流行的时候,我们直接在页面中引入需要的 lib 即可。后续随着模块化、transpile 逐渐成熟、需求逐渐增多,对后端能力的需求也逐渐强烈。反过来说,也正是 Node.js 赋予了 js 开发者在浏览器外运行代码的能力,加速催生了这些项目的出现。
- Bundle:webpack,vite,esbuild,parcel
- Uglify:uglijs
- Transpile:bablejs.typescript
- 现状 :难以替代
Web服务端的应用
Node.js 开发 Web 服务端应用,也就是后端服务。
- 学习路线平缓,开发效率比较高
- 运行效率接近常见的编程语言
- 社区生态丰富与工具链成熟
- 与前端结合的场景具有优势
- 现状:竞争激烈Node.js有自己的优势。
Electron跨段桌面应用
这里不只是指 electron,还包括 nw.js.. ; 这个场景在较大的企业里面非常常见。
- 商业应用:vscode,slack,discord,zoom
- 大型公司内的效率工具
- 现状:大部分场景在选型时都值得考虑
03.Node.js运行时结构
Node.js 运行时主要由 解释器、标准库和本地模块组成。
解释器:V8 引擎就是 JavaScript 解释器,它负责解析和执行 JavaScript 代码。
本地模块:Node.js 集成了众多高性能的开源库,它们使用 C/C++ 语言实现,比如:图中的libuv,nmp,zlib,OpenSSL,c-ares
标准库:封装在本地模块的 C/C++ 接口,提供一套 JavaScript 接口给开发人员,并且要保持接口在不同平台上的一致性。这套接口就是Node.js标准库
图解:
Node.js运行时结构的特点
- 异步I/O
- 单线程
- 跨平台
异步I/O : 当Node.js执行I/O操作时,会在响应返回后操作恢复操作,而不是阻塞线程并占用额外内存等待。
单线程 :JS线程 + uv线程池 + V8任务线程池 + V8 lnspector线程
跨平台 :Node.js跨平台+JS无需编译环境 = 开发成本低,整体学习成本低
04.编写Http Server
const http = require('http');
//创建web服务器
const server = http.createServer((req,res) =>{
//设置请求头
res.setHeader('Content-Type', 'text/html');
res.end(
`
<html>
<head></head>
<body>
<h1>MY APP</h1>
</body>
</html>
` );
} )
// 监听端口启动服务
server.listen(5000,()=>{
console.log(`5000端口开启成功`);
});