RN-《深入浅出nodejs》

第一章 Node简介

异步I/O

在Node中,绝大多数的操作都以异步的方式进行调用,从文件读取到网络请求。这样的意义在于,在Node中,我们可以从语言层面很自然地进行并行I/O操作。每个调用之间无须等待之前的I/O调用结束

下面的两个文件读取任务的耗时取决于最慢的那个文件读取的耗时:

1
2
3
4
5
6
fs.readFile('/path1', function (err, file) {
console.log('读取文件1完成');
});
fs.readFile('/path2', function (err, file) {
console.log('读取文件2完成');
});

而对于同步I/O而言,它们的耗时是两个任务的耗时之和

事件与回调函数

事件的编程方式具有轻量级、松耦合、只关注事务点等优势。

纵观下来,回调函数也是最好的接受异步调用返回数据的方式。

第二章 模块机制

CommonJS模块规范

主要分为模块引用、模块定义、模块标识3个部分。

模块引用

1
let math = require('math')

模块定义

1
2
3
exports.add = function () {
console.log("add函数");
}

模块标识

模块标识其实就是传递给 require() 方法的参数,它必须是符合小驼峰命名的字符串,或者以 . .. 开头的相对路径,或者绝对路径。它可以没有文件名后缀.js

Node的模块实现

在Node中引入模块,需要经历如下3个步骤。

(1)路径分析 (2)文件定位 (3)编译执行

在Node中,模块分为两类,一类是Node提供的模块,称为核心模块;另一类是用户编写的模块,称为文件模块

优先从缓存加载

不论是核心模块还是文件模块,require()方法对相同模块的二次加载都一律采用缓存优先的方式,这是第一优先级的,不同之处在于核心模块的缓存检查先于文件模块的缓存检查。

路径分析和文件定位

模块标识符分析

核心模块

文件定位

目录分析和包