Node.js优点
优点
1.异步非阻塞的I/O(I/O线程池)
2.特别适用于I/O密集型应用
3.事件循环机制
4.单线程(成也单线程,败也单线程)
5.跨平台
缺点
1.回调函数嵌套太多,太深(俗称回调地狱)
2.单线程,处理不好CPU密集型任务
node中的函数
通过argument.callee.toString()
可以看到一个函数“
function (exports, require, module, __filename, __dirname) {}
这个函数是所有模块都有的,node编译时往其中注入5个参数:
exports
暴露模块
require
引入模块
module
exports属性暴露模块
__filename
文件的绝对路径
_dirname
文件夹的绝对路径
node中的事件循环模型
- 第一个阶段:timers(定时器阶段–
setTimeout
,setInterval
)
- 开始计时
- 执行定时器的回调
第二个阶段:pending callbacks(系统阶段)
第三个阶段:idle,prepare(准备阶段)
第四个阶段:poll(轮询阶段,核心)
如果回调队列有待执行的回调函数
从回调队列中取出回调函数同步执行(一个一个执行),直到回调队列为空了,或者达到系统最大限度
如果回调队列为空
如果有设置过
setImmediate
,进入下一个check阶段,目的:为了执行setImmediate
所设置的回调如果未设置过
setImmediate
,在此阶段停留,等待回调函数被插入回调队列,若定时器到点了进入下一个check阶段,目的:为了走第五阶段,随后走第六阶段,随后第一阶段(最后目的)
第五个阶段:check(专门用于执行setImmediate所设置的回调)
第六个阶段:close callbacks(关闭回调阶段)
包和包管理器
包实际上就是一个压缩文件,解压以后还原为目录。符合CommonJs规范的目录,应该包含如下文件和文件夹
1.package.json 描述文件(包的说明书,必须要有!!)
2.bin 可执行二进制文件
3.lib js代码
4.doc 文档
5.test 单元测试
npm是什么
全称:Node Package Manager , Node的包管理器
npm常用命令
- 搜索
npm search xxxxx
- 安装
1.
npm install xxxx --save
//或
npm i xxxx -S
//或
npm i xxxx
2.
npm install xxxx --asve-dev
//或
npm i xxxx -D
//安装包并将该包写入到(开发依赖中development)
生产(代码写完了,部署到服务器上,给客户用)依赖(dependendcies):
Jquery、bootstrap等
开发(程序员正在写代码的时候,正在写代码的时候)依赖(devDependencies):语法检查、压缩代码、扩展css前缀,Jquery、编译less的包
注意:某些包既属于开发依赖、又属于生产依赖—例如jquery
npm i xxxx -g //全局安装xxxx包
一般来说,带有指令集的包要进行全局安装,例如:browserify、babel等,全局安装的包,其指令到处可用,如果该包不带有指令,就无需全局安装
查看全局安装的位置:
npm root -g
4.
安装xxxx包的xx版本
npm i xxxx@xxx
- 移除
npm remove xxxx //在nodemodule删除xxx包,同时会删除package.json的声明
- 其他命令
npm aduit fix //检测项目依赖一些问题,并且尝试修复
npm view xxxx versions //查看远程npm仓库中xxx包所有版本信息
npm view xxx version //查看npm仓库中xxx包最新版本信息
npm ls xxx //查看我们所安装的xxx包的版本
关于版本号的说明
“^3.x.x”:锁定大版本,以后安装包的时候,保证包是3.x.x版本,x默认取最新的
“~3.1.x”锁定小版本,以后安装包的时候,保证包是3.1.x版本,x默认取最新的
“3.1.1”锁定完整版本,以后安装包的时候,保证包是3.1.1版本