没有白看的书
这本书买了五六年了,以前硬着头皮看,做的笔记,批注,到处是困惑,没有白走的路,学不会的总有一天我会把你学会,学不会的,只是必不可少的铺垫。
最近定位 H5-dooring 的server 端问题,才把这本书看完,挺好的一本中文技术书。以前 node 没有经验,完全看不懂,这两年在 nestjs 上面花了比较多的时间,初略写了一点 node 的东西,再回头看这本书,才看懂了一点。
书的章节并不是顺序的,可以跳着看,第二章 C++ 模块现在还是看不懂,索性直接跳过。
笔记
第五章 内存控制
- v8 有内存限制,32位系统下约为 0.7G,64位系统下约为 1.4G,使用超过限制会导致进程退出。
- v8 的内存分为新生代和老生带。
- 新生代主要通过 Scavenge 算法,通过牺牲空间换区时间的方式进行垃圾回收。
- 老生代主要通过 Mark—Sweep(标记清除,只清除死亡对象,较快,导致内存空间不连续),在空间不足以使用 Mark-Sweep 时候,使用Mark-Compact(标记整理,较慢,内存空间连续) 进行垃圾回收。
- Buffer 对象不同于其他对象,不经过 v8 的内存分配机制,不会有堆内存大小的限制
第六章 理解 Buffer
- Buffer 是一个类 Array 的对象,但它主要用于操作字节,是二进制数据。
- Buffer 支持的编码类型可以通过
toString
方法转为字符串,不支持的编码,如 GBK,GB2312 会乱码 - 字符宽度,导致 Buffer 不能直接破解,要使用
Buffer.concat
结合数组操作进行拼接。 - Buffer 传输性能比直接传递字符串要高
第七章 网络编程
- 三次握手通过
socket
实现,node 中也不例外
第九章 玩转进程
- 创建子进程
spawn()
: 启动一个子进程来执行命令exec()
: 启动一个子进程来执行命令,与spawn()
不同的是其接口不同,它有一个回调接口获悉子进程的情况execFile()
: 启动一个子进程来执行可执行文件fork()
: 与spawn()
类似,不同点在于它创建 Node 的子进程只需要指定要执行的 JavaScript 文件模块即可
- 进程间通讯
- IPC
- 句柄传递
- 状态共享
- Redis 等
- 主动通知
- Cluster(Pm2 用的它)
总结
这本书遇到问题的时候可以多翻翻,各方面都有涉及,当然毕竟是块 10 年的书了,底层,方法论都没有问题,具体的工具性的东西可能需要多搜索下。