node.js是什么?要弄懂这个问题,首先来看两个概念性的东西 javascript、v8引擎
JavaScript:
JavaScript是一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。
Chrome V8 引擎:
V8引擎是一个JavaScript引擎实现,最初由一些语言方面专家设计,后被谷歌收购,随后谷歌对其进行了开源。V8使用C++开发,,在运行JavaScript之前,相比其它的JavaScript的引擎转换成字节码或解释执行,V8将其编译成原生机器码(IA-32, x86-64, ARM, or MIPS CPUs),并且使用了如内联缓存(inline caching)等方法来提高性能。有了这些功能,JavaScript程序在V8引擎下的运行速度媲美二进制程序。V8支持众多操作系统,如windows、linux、android等,也支持其他硬件架构,如IA32,X64,ARM等,具有很好的可移植和跨平台特性。
另外,JavaScript引擎的执行过程大致是: 源代码-→抽象语法树-→字节码-→JIT-→本地代码(V8引擎没有中间字节码)。在2017年4月底,v8 发布了5.9 版本,在此版本中新增了一个 Ignition 字节码解释器,并默认开启。做出这一改变的原因为:(主要动机)减轻机器码占用的内存空间,即牺牲时间换空间;提高代码的启动速度;对 v8 的代码进行重构,降低 v8 的代码复杂度。
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境
以往的JavaScript是运行在客户端(最常见的是浏览器)的;
node.js出现后使其可以运行在服务端;最常用作中端 承前启后;
node.js天生异步
事件驱动
非阻塞I/O
轻量、可伸缩,适于实时数据交互应用
单进程,单线程
NodeJS的优缺点
优点:1. 高并发(最重要的优点)
2. 适合I/O密集型应用
缺点:1. 不适合CPU密集型应用;CPU密集型应用给Node带来的挑战主要是:由于JavaScript单线程的原因,如果有长时间运行的计算(比如大循环),将会导致CPU时间片不能释放,使得后续I/O无法发起;
解决方案:分解大型运算任务为多个小任务,使得运算能够适时释放,不阻塞I/O调用的发起;
2. 只支持单核CPU,不能充分利用CPU
3. 可靠性低,一旦代码某个环节崩溃,整个系统都崩溃
原因:单进程,单线程
解决方案:(1)Nnigx反向代理,负载均衡,开多个进程,绑定多个端口;
(2)开多个进程监听同一个端口,使用cluster模块;
4. 开源组件库质量参差不齐,更新快,向下不兼容
5. Debug不方便,错误没有stack trace
KOA2
Koa 是一个新的 web 框架,由 Express 幕后的原班人马打造, 致力于成为 web 应用和 API 开发领域中的一个更小、更富有表现力、更健壮的基石。 通过利用 async 函数,Koa 帮你丢弃回调函数,并有力地增强错误处理。 Koa 并没有捆绑任何中间件, 而是提供了一套优雅的方法,帮助您快速而愉快地编写服务端应用程序。
NPM与yarn
1、yarn 比 npm 快
2、yarn支持离线下载
3、yarn并行下载包,这也是快的原因之一
4、yarn更安全,在锁定包依赖版本基础上,增加了协议检查的功能
5、yarn从多个仓库下载包,使其支持性相对于npm来说较好
6、yarn使用上较简单,例如 yarn add mysql 与npm install --save mysql
7、安装版本统一(之前在帮前端同事弄redis缓存时深有体会,因其用的vue框架 内置koa,一开始用npm安装redis包 老是报错 ,弄了好久,改用yarn安装包一切就正常了)
nvm介绍:
经常遇到需要运行多个项目的情况,其要求的node版本可能会不同。这种情况下维护多个版本时很不明智的,为了解决这个问题nvm包管理工具就出现了
安装nvm ,建议卸掉原有的node
https://github.com/coreybutler/nvm-windows/releases
这里是windows中的下载链接 linux、mac在github上面都能找到对应的链接
判断安装是否成功
nvm -v
安装node.js
nvm install node版本号
使用指定版本node
nvm use node版本
查看node版本
node -v
nodemon
在编写调试node.js项目时,经常需要npm run dev 然后在关闭掉,非常繁琐,
使用nodemon工具,可以监听文件变化,自动重启
全局安装
npm install nodemon -g
使用:
在项目中nodemon 【文件名】
pm2
是一个进程,管理node.js进程,查看状态,性能监控,进程守护 负载均衡等
1、 pm2需要全局安装
npm install -g pm2
2、进入项目根目录
2.1 启动进程/应用pm2 start bin/www 或 pm2 start app.js
2.2 重命名进程/应用pm2 start app.js --name wb123
2.3 添加进程/应用 watchpm2 start bin/www --watch
2.4 结束进程/应用pm2 stop www
2.5 结束所有进程/应用pm2 stop all
2.6 删除进程/应用pm2 delete www
2.7 删除所有进程/应用pm2 delete all
2.8 列出所有进程/应用pm2 list
2.9 查看某个进程/应用具体情况pm2 describe www
2.10 查看进程/应用的资源消耗情况pm2 monit
2.11 查看pm2的日志pm2 logs
2.12 若要查看某个进程/应用的日志,使用pm2 logs www
2.13 重新启动进程/应用pm2 restart www
2.14 重新启动所有进程/应用pm2 restart all