阻塞非阻塞 I/O (很像是 同步异步) 阻塞: I/O 时进程休眠等等 I/O 完成后进行下一步。 非阻塞:I/O 时函数立即返回,进程不等待 I/O 完成
事件驱动: 用户点击按钮时 触发事件
CPU 密集: 压缩、解压、加密、解密(计算、逻辑判断) I/O 密集: 文件操作、网络操作、数据库(存取设备、网络设施读取操作)
NodeJs 在处理高并发、I/O 密集场景性能优势明显
Web 常见场景
- 静态资源读取(JavaScript,css, html, 全是 I/O 操作)
- 数据库操作(数据存取到物理磁盘上或者内存中)
- 渲染页面(读取模板文件,在根据数据生成html)
进程:计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位 多进程:启动多个进程,多个进程可以一块执行多个任务 线程:进程内一个相对独立的、可调度的执行单元,与同属一个进程的线程共享进程的资源
- / 表示绝对路径, ./ 表示相对于当前文件的
- 支持 js、json、node 扩展名,不写依次尝试
- 不写路径 则认为是 build-in 模块或者各级 node_modules 内的第三方模块
- module 被加载的时候执行,加载后缓存
- 一旦出现某个模块被循环加载,就只输出已经执行的部分,还未执行的部分不会输出
npm root -g
查看全局安装包的位置
exports 是 module.exports 的快捷方式,引用。但要注意,你不可以设置它的指向(赋值),如果赋值就会失去对 module.exports 的引用。如
exports = {
a: 1,
b: 2,
test: 100
}
这样的话,当前模块没有任何输出。 只能是 exports.obj = {}
的形式才可以.
因为最开始 exports 就是默认指向了 module.exports。
- global 与 浏览器下 的 window 很相像,一些全局属性方法挂到 global 对象上
- CommonJS Buffer process console setTimeout setTimeout setImmediate 都是其属性
global.num = 2
其它模块使用的时候 直接num
就好,不用加global
,加也没事
argv0
是 argv
第一个值的引用
process.nextTick
将任务放到当前队列的队尾
setImmediate
将任务放到下一队列的队首
setTimeout
放在中间...
__dirname __filename
总是返回文件的绝对路径
process.cwd()
(进程在哪里启动的) 总是返回执行 node 命令 在哪个文件夹启动的
require
方法中总是相对当前文件所在文件夹
buffer
用于处理二进制数据流- 实例类似整数数组,大小固定
- C++ 代码在 V8堆外分配物理内存
理解:有方向的数据。从一个设备流向另外一个设备。在Linux当中,将设备抽象为文件,数据从一个文件流向另外一个文件。 我们平常操作文件是先将文件放在内存当中,然后进行操作。电脑看电影,起初电脑内存只有512M的时候,却也是可以看2G的电影。利用stream,将文件一点点读取放入到内存中,然后播放。
- Z 代表BUG的修复
- Y 代表有了新功能,保证着向下兼容
- X 代表了大版本升级,不保证兼容
linux 中,X是偶数时候代表稳定版,是奇数位的时候代表不稳定版。但并不是所有程序都如此遵从
package.json 当中 依赖库后面的 ^2.0.0(2.x) 代表着安装此依赖时,X 位不变,其它的照最新的来 package.json 当中 依赖库后面的 ~1.2.0(1.2.*) 代表着安装此依赖时,X、Y位不变,Z位按照最新的来
preset 可以理解为是一个套餐,他可以转译许多语法, 而 plugin 知识针对个别转译的