Nodejs概述
来源: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
评论