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和浏览器的区别
- Node 环境中是没有
DOM,BOM, 同样的,浏览器中也没有fs,path这些模块。 - node 的事件循环如下:
┌───────────────────────────┐
┌─>│ timers │
│ └─────────────┬─────────────┘
│ ┌─────────────┴─────────────┐
│ │ pending callbacks │
│ └─────────────┬─────────────┘
│ ┌─────────────┴─────────────┐
│ │ idle, prepare │
│ └─────────────┬─────────────┘ ┌───────────────┐
│ ┌─────────────┴─────────────┐ │ incoming: │
│ │ poll │<─────┤ connections, │
│ └─────────────┬─────────────┘ │ data, etc. │
│ ┌─────────────┴─────────────┐ └───────────────┘
│ │ check │
│ └─────────────┬─────────────┘
│ ┌─────────────┴─────────────┐
└──┤ close callbacks │
└───────────────────────────┘
浏览器的事件循环如下:
- Node.js 使用 CommonJS 模块系统,而在浏览器中我们开始看到正在实施的 ESM 标准。 注:如果浏览器支持 fs 会导致安全问题。
node.js具体的内核:
node.js中的nvm与nrm:
nvm:是一个 node 版本管理工具,可以用来切换node.js的不同版本。使用方法:
nvm use [version]
nrm:用于对 node 镜像源进行设置。使用方法
nrm ls //查看目前可用的源
nrm use taobao //切换到要使用的那个源