来源:Node.js

特性

  • Nodejs既不是JS应用,也不是一门编程语言,而是JavaScript的运行时,具有高性能、可扩展、简单的优点

  • Nodejs构建在V8引擎之上,而V8引擎是由C/C++编写的,因此JS代码需要由C/C++转化后再执行

  • Nodejs的异步I/O和事件驱动设计理念,可以高效地处理大量并发请求;Nodejs提供的非阻塞式I/O接口和事件循环机制,使开发人员可以编写高性能、可扩展的应用程序,异步I/O最终都由libuv事件循环库实现

  • NodeJs使用npm作为包管理工具,类似于Python的pip、Java的Maven,目前npm拥有上百万个模块

  • Nodejs适合I/O密集型应用,不适合CPU密集型应用;Nodejs I/O因libuv有很强的处理能力,但Nodejs是单线程的,容易造成CPU占用率高;如果必须要使用Nodejs做CPU密集型应用,可以使用C++插件,或Nodejs提供的cluster

    CPU密集型指的是一些图像或音频处理、需要大量数据结构+算法的应用

架构

从上到下分别是

  • 应用层:实际操作的一些API
  • 中间层:应用层和底层相互通讯的桥梁
  • 底层:编程语言是JavaScript,所以必须使用V8引擎,此外还包含了其他的模块
  • 最底层:操作系统,Nodejs能够跨平台

应用场景

以下并非所有举例都是Nodejs编写,可能是其运行环境可配合Nodejs,或者需要依靠Nodejs运行

  • 前端:Vue、Angular、React、nuxtjs、nextjs
  • 后端:
    • serverLess
    • web应用:express、Nestjs、koa
    • RPC服务:GRPC
    • 爬虫:cheerio
    • 自动化UI测试:Puppeteer
    • BFF层、网关层
    • 即时性应用:socket.io
  • 桌面端:electron、tauri、NWjs
  • 移动端:weex、ionic、hybrid、React Native
  • 基建端:
    • 打包工具:Webpack、Vite、rollup、gulp
    • CSS预处理:less、scss、postCss
    • 编译器:Babel、SWC
    • 其他:inquire、command、shelljs
  • 嵌入式:Ruffjs
  • 单元测试:jest、vitest、e2e
  • CICD:Jenkins、docker、Husky、miniprogram-ci
  • 反向代理:http-proxy、Any-proxy