Node.js与前端开发实战 | 青训营笔记

62 阅读2分钟

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

Node.js与前端开发实战

Node.js 的应用场景

  • 前端工程化
  • Web 服务端应用
  • Electron 跨端桌面应用

前端工程化

  • Bundle (打包工具):
    • Webpack
    • Vite
    • Esbuild
    • Parcel
  • Uglify (代码压缩):
    • Uglifyjs
  • Transpile (转译):
    • Bablejs
    • Typescript

Web 服务端应用

Node.js 的特点

  • 学习曲线平缓, 开发效率高
    • JS本身熟悉, 主要了解运行环境的不同, Node.js 的API
  • 运行效率接近常见编译语言
  • 社区生态丰富以及工具链成熟 (npm, V8 inspector)
    • 虽然社区生态丰富, 但是相关包的成熟度可能不如其他语言
  • 与前端结合的场景会有优势 (SSR)

现状: 竞争激烈, Node.js 有自己独特的优势

基于Web技术的跨端应用

  • 商业应用:
    • vscode
    • slack
    • discord
    • zoom
  • 大型公司内部的效率工具

Node.js 运行时结构

图片.png

libuv: 负责事件循环 (eventloop), 封装各种操作系统API (syscall)

结构带来的特点

  • 异步IO
  • 单线程
  • 跨平台

异步I/O

当Node.js执行I/O时, 不需要去阻塞线程, 以及不需要占用额外内存等待

单线程

JS单线程实际上只有JS主线程是单线程

实际上的结构:

  • JS 线程
  • uv 线程池
  • V8 任务线程池
  • V8 Inspector 线程

优点: 不需要考虑多线程状态同步问题, 也不需要锁, 但是需要考虑异步问题, 比较高效利用系统资源

缺点: 主线程阻塞会产生更多负面影响 (解决方法: 多进程/多线程)

跨平台

  • 大部分功能 / API支持跨平台
  • Node.js 跨平台 + JS 无需编译 = 开发成本低与整体学习成本低

延伸话题

Node.js 代码贡献

好处:

  • 从使用者的角色逐步理解底层细节, 可以解决更复杂的问题
  • 自我证明, 有助于职业发展
  • 解决社区问题, 促进社区发展

难点:

  • 花时间

追踪与诊断

需要了解 Node.js 的底层, 需要了解操作系统及各种工具

需要经验

WASM, NAP

Node.js 支持 WASM与WASI

NAPI 执行 C 接口的代码, 同时能保留原生代码的性能

不同编程语言间通信的解决方案