<commit_before># 《Node.js 设计模式（第 2 版）》读书笔记

![9787121335228](http://cdn.jerryshi.com/picgo/20180819235524.png)

    2018年8月以来读过最好的node.js深入的书！

> 正好今天了解到”费曼学习法“，这本神书我将结合试探一番。

## 第1章 欢迎来到Node.js平台

### Node.js的哲学思想

* 小核心
  * 将功能最小集合，其余留给所用用户平台
  * 好处：社区自由化、快速迭代、广泛试验、可维护性高
* 小模块
  * 遵循UNIX哲学：“小即是美”、“让一个程序做好一件事”
  * 好处：高可复用性、易于理解和使用、测试和维护简单、与浏览器共享
  * `DRY`原则
* 小接触面
  * 一个模块通常只暴露出最小的一组功能特性
* 简单和使用
  * Keep It  Simple, Stupid (KISS)原则
  * 简单是复杂的最高境界
  * 设计必须是简单的，无论是实现还是接口。更重要的是实现要比接口更简单。简单是设计中最重要的考虑因素。

### ES205

* `const` 并不意味着赋值是恒定不变的，但是该值的引用是静态的
* 当需要引入一个模块时，使用`const`声明是最佳实践
* 如果需要创建一个不可变的对象，只使用const是不够的，还需要使用ES5的`Object.freeze()`或其他库
* 箭头函数时绑定到它们的词法作用域内。说大实话就是：一个箭头函数中的`this`的值和父块中的值时相同的
* `Map`真正又去的地方是使用函数和对象作为key，而这也是普通对象无法完成的，因为对象的所有key都会自动转换为字符串
* 当`Map`迭代时，仍然遵循条目被插入的循序，这也是普通对象无法保证的
* WeakMap和WeakSet类似，只允许对象作为主键。当其主键key的对象被赋值`undefined`时，集合中的元数据也会跟着被清除！
* WeakMap和WeakSet集合并不比map和set更好或更烂，只是适合不同的使用场景<commit_msg>Update 《Node.js设计模式sec》<commit_after># 《Node.js 设计模式（第 2 版）》读书笔记

![9787121335228](http://cdn.jerryshi.com/picgo/20180819235524.png)

    2018年8月以来读过最好的node.js深入的书！

> 正好今天了解到”费曼学习法“，这本神书我将结合试探一番。

## 第1章 欢迎来到Node.js平台

### Node.js的哲学思想

* 小核心
  * 将功能最小集合，其余留给所用用户平台
  * 好处：社区自由化、快速迭代、广泛试验、可维护性高
* 小模块
  * 遵循UNIX哲学：“小即是美”、“让一个程序做好一件事”
  * 好处：高可复用性、易于理解和使用、测试和维护简单、与浏览器共享
  * `DRY`原则
* 小接触面
  * 一个模块通常只暴露出最小的一组功能特性
* 简单和使用
  * Keep It  Simple, Stupid (KISS)原则
  * 简单是复杂的最高境界
  * 设计必须是简单的，无论是实现还是接口。更重要的是实现要比接口更简单。简单是设计中最重要的考虑因素。

### ES205

* `const` 并不意味着赋值是恒定不变的，但是该值的引用是静态的
* 当需要引入一个模块时，使用`const`声明是最佳实践
* 如果需要创建一个不可变的对象，只使用const是不够的，还需要使用ES5的`Object.freeze()`或其他库
* 箭头函数时绑定到它们的词法作用域内。说大实话就是：一个箭头函数中的`this`的值和父块中的值时相同的
* `Map`真正又去的地方是使用函数和对象作为key，而这也是普通对象无法完成的，因为对象的所有key都会自动转换为字符串
* 当`Map`迭代时，仍然遵循条目被插入的循序，这也是普通对象无法保证的
* WeakMap和WeakSet类似，只允许对象作为主键。当其主键key的对象被赋值`undefined`时，集合中的元数据也会跟着被清除！
* WeakMap和WeakSet集合并不比map和set更好或更烂，只是适合不同的使用场景

### Reactor模式

> Reactor模式是Node.js异步特性的和核心：单线程架构和非阻塞I/O。

使用阻塞I/O实现的Web服务间无法同时处理同一线程中的多个链接。Socket上的每个I/O将阻止任何其他连接的处理，因此在Web服务器中处理并发的传统方法是为需要处理的没饿并发连接启动一个线程或进程(或重用资源池中的进程)。这样，当线程被I/O才注意阻塞时，不会影响其他请求的可用性，因为他们在单独的线程中处理。
{'fraction_non_alphanumeric': 0.122184954480115, 'fraction_numerical': 0.03641590800191662, 'mean_word_length': 8.238938053097344, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 6, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1970055', 'n_tokens_mistral': 1765, 'n_tokens_neox': 1954, 'n_words': 79}