node 基础

97 阅读1分钟

node 是什么?

Node.js 是⼀个 JS 的服务端运⾏环境,基于 V8,是在 JS 语⾔规范的基础上,封装了⼀些服务端的runtime,让我们能够简单实现⾮常多的业务功能。

Node.js 在2009年(第一版npm被创建)诞生之初是为了实现高性能的 web 服务器,再后来 Node.js 慢慢演化为了一门服务端“语言”。

node 能做哪些事情?

  • npm run start 运行了node.
  • 跨平台开发: PC web H5 RN Weex
  • 后端开发: API, RPC
  • 前端开发: 前端工具链
  • 工具开发:脚本、脚手架、命令行。 分类举例:
  • 压缩: UglifyJS, JSMin
  • 管理: npm, yarn, bower,
  • 模块系统: Commonjs, ESM
  • 模块构建: Babel, Browserify, Webpack, Gulp, Grunt,
  • yeoman
  • slush
  • CRA, CLI

node.js的问题

  • 单线程很脆弱,但是可以通过 cluster / pm2 多核并发实现负载均衡;
  • node 对 MongoDB, Mysql, redis支持友好,但是对neo4j, tigerGraph的支持就不是那么友好了;
  • 安全问题

node和浏览器的区别

  1. Node 环境中是没有 DOM, BOM, 同样的,浏览器中也没有 fs, path 这些模块。
  2. node 的事件循环如下:
   ┌───────────────────────────┐
┌─>│           timers          │
│  └─────────────┬─────────────┘
│  ┌─────────────┴─────────────┐
│  │     pending callbacks     │
│  └─────────────┬─────────────┘
│  ┌─────────────┴─────────────┐
│  │       idle, prepare       │
│  └─────────────┬─────────────┘      ┌───────────────┐
│  ┌─────────────┴─────────────┐      │   incoming:   │
│  │           poll            │<─────┤  connections, │
│  └─────────────┬─────────────┘      │   data, etc.  │
│  ┌─────────────┴─────────────┐      └───────────────┘
│  │           check           │
│  └─────────────┬─────────────┘
│  ┌─────────────┴─────────────┐
└──┤      close callbacks      │
   └───────────────────────────┘

浏览器的事件循环如下:

image.png

  • Node.js 使用 CommonJS 模块系统,而在浏览器中我们开始看到正在实施的 ESM 标准。 注:如果浏览器支持 fs 会导致安全问题。

node.js具体的内核:

未命名绘图-Node内核.drawio.png

node.js中的nvm与nrm:

nvm:是一个 node 版本管理工具,可以用来切换node.js的不同版本。使用方法:

nvm use [version]

nrm:用于对 node 镜像源进行设置。使用方法

nrm ls //查看目前可用的源
nrm use taobao //切换到要使用的那个源