如何安装node
可以从官网直接下载或者使用brew或者wget下载工具进行下载,但是更加推荐nvm管理和安装我们的node,
此处我们就来介绍nvm来管理我们的node
什么nvm?
nvm 是 Node.js 的版本管理器 (version manager),可在同一台主机上安裝多个版本的 Node.js 环境,因為不同專案可能會使用不同的 Node.js 版本,那就需要通过一個版本管理器來切换不同的 Node.js 版本。
安装nvm
可用 curl 或 wget 指令使用安装脚本安装或更新 nvm:
$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
或
$ wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
此安装脚本 nvm repo clone 到 ~/.nvm,并且将 source line 新增至你的 profile 设定 ( ~/.bash_profile、~/.zshrc、~/.profile 或 ~/.bashrc ):
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && . "$NVM_DIR/bash_completion" # This loads nvm bash_completion
❗️注意这里应该将这串代码写入我们( ~/.bash_profile、~/.zshrc、~/.profile 或 ~/.bashrc )
文件中
安装node
// 安装
nvm install node
// 查看本地node可用版本
nvm ls
// 切换
nvm use v10.6.3
Node是什么?
一句话说介绍node:Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境
所以应该要正确理解:Node.js不是
一门新语言
,Node是"基于V8创建一个轻量级的Web服务器并提供一套库",能够使得javascript脱离浏览器运行,简单理解就是使javascript具有服务端的能力
两个特征
Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效
非阻塞I/O:non-blocking or asynchronous I/O
事件驱动:Event-driven
非阻塞I/O
❗️I/O是input/output的意思,就是输入输出操作
传统的服务器语言大多是多线程、阻塞式 I/O。这也是 Node 与众不同的地方,对于传统的服务器语言,在与用户建立连接时,每一个连接都是一个线程。当有十万个用户连接时,服务器上就会有十万个线程。而阻塞式 I/O 是指,当一个线程在执行 I/O 操作时,这个线程会阻塞,等待 I/O 操作完成后继续执行,而node由于单线程的缘故,采用非阻塞I/0这种模型机制,但是性能依旧高效
非阻塞I/O:发起I/O操作不等得到响应或者超时就立即返回,让进程继续执行其他操作,但是要通过轮询方式不断地去check数据是否已准备好
事件驱动
Nodejs中充斥的大量的
异步
,事件循环是异步实现的核心,它与浏览器中的执行模型基本保持了一致,而事件循环则是事件驱动里的概念
事件驱动:简单理解从事件角度说,事件驱动程序的基本结构是由事件收集器、事件发送器和事件处理器组成
❗️Nodejs的异步是通过事件驱动模型去实现,而其核心的EventEmitter类
也是实现事件驱动不可或缺的模块,我们在后续会重点分析并进行实现
JS单线程
javascript在最初设计时设计成了单线程,为什么不是多线程呢?如果多个线程同时操作DOM那岂不会很混乱?这里所谓的单线程指的是主线程是单线程的,所以在Node中主线程依旧是单线程的。
单线程特点是节约了内存,并且不需要在切换执行上下文
而且单线程不需要管锁的问题.
同步异步和阻塞非阻塞
同步与异步
同步和异步关注的是消息通知机制
同步就是发出调用后,没有得到结果之前,该调用不返回,一旦调用返回,就得到返回值了。简而言之就是调用者主动等待这个调用的结果
而异步则相反,调用者在发出调用后这个调用就直接返回了,所以没有返回结果。换句话说当一个异步过程调用发出后,调用者不会立刻得到结果,而是调用发出后,被调用者通过状态、通知或回调函数处理这个调用
阻塞与非阻塞
阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态.
阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。
非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。
区别
同步异步取决于
被调用者
,阻塞非阻塞取决于调用者
同步阻塞
异步阻塞
同步非阻塞
异步非阻塞
注意发起一个操作时候,并不是
单方面考虑就行
,而是考虑双方的场景
也就是调用者和被调用者,抓住这点就很好理解他们的区别了
总结
上述我们简单了理解Node的概念以及他重要的两个特征,理解了这一章节后,后续有助于我们理解
事件驱动模型
、Nodejs的Event Loop
等等概念
在线笔记
最近花了点时间把笔记整理到语雀上了,方便同学们阅读:语雀笔记入口:https://www.yuque.com/wanggangfeng/bsp75t/inu4gw
最后
1.看到这里了就点个在看支持下吧,你的「点赞,在看」
是我创作的动力。
2.关注公众号前端壹栈
,回复「1」加入前端交流群
!「在这里有好多前端开发者,会讨论前端知识,互相学习」!
3.也可添加公众号【前端壹栈】
,一起成长 .