[ Node.js与前端 | 青训营笔记 ]

70 阅读2分钟

这是我参与「第五届青训营」伴学笔记创作活动的第10天。

一、本堂课重点内容

本节课的重点在于Node.js的应用场景、运行结构与服务器开发。

二、详细知识点介绍

Node.js的定义

  • Node.js 是一个基于 Chrome JavaScript 运行时建立的一个平台。
  • de.js 是一个事件驱动 I/O 服务端 JavaScript 环境,基于 Google 的 V8 引擎。

Node.js的应用场景

前端工程化

image.png

  • Bundle: webpack, vite, esbuild, parcel
  • Uglify: uglifyjs
  • Transpile: bablejs, typescript
  • 其他语言加入竞争: esbuild, parcel, prisma
  • 现状:难以替代

WEB服务端应用

image.png

  • 学习曲线平缓,开发效率较高
  • 运行效率接近常见的编译语言
  • 社区生态丰富及工具链成熟(npm, V8 inspector)
  • 与前端结合的场景会有优势(SSR)
  • 现状:竞争激烈,Node.js有自己独特的优势

Electron跨端桌面应用

image.png

  • 商业应用: vscode, slack, discord,zoom
  • 大型公司内的效率工具
  • 现状:大部分场景在选型时,都值得考虑

Node.js运行时结构

运行结构图

image.png

Node.js运行时结构-V8, libuv

  • V8: JavaScript Runtime,诊断调试工具(inspector)
  • libuv: eventloop (事件循环),syscall (系统调用)
  • 举例:用node-fetch发起请求时

Node.js运行时结构-单线程

JS单线程

  • 实际: JS线程+ uv线程池+ V8任务线程池+ V8 Inspector线程
  • 优点:不用考虑多线程状态同步问题,也就不需要锁;同时还能比较高效地利用系统资源;
  • 缺点:阻塞会产生更多负面影响
  • 解决办法:多进程或多线程

Node.js运行时结构-跨平台

  • 跨平台(大部分功能、api)
  • Node.js跨平台+ JS无需编译环境(+ Web跨平台+诊断工具跨 平台)
  • 开发成本低(大部分场景无需担心跨平台问题),整体学习成本低

三、实践练习例子

使用Node.js创建应用

创建一个服务器


var http = require('http');

http.createServer(function (request, response) {
    response.writeHead(200, {'Content-Type': 'text/plain'});
    response.end('Hello World\n');
}).listen(8888);
// 终端打印如下信息
console.log('Server running at http://127.0.0.1:8888/');

四、引用参考

菜鸟教程、csdn