本书从不同的视角介绍了 Node 内在的特点和结构。由首章Node 介绍为索引,涉及Node 的各个方面,主要内容包含模块机制的揭示、异步I/O 实现原理的展现、异步编程的探讨、内存控制的介绍、二进制数据Buffer 的细节、Node 中的网络编程基础、Node 中的Web 开发、进程间的消息传递、Node 测试以及通过Node 构建产品需要的注意事项。最后的附录介绍了Node 的安装、调试、编码规范和NPM 仓库等事宜。
本书适合想深入了解 Node 的人员阅读。
第1章 Node简介1
1.1 Node的诞生历程1
1.2 Node的命名与起源1
1.2.1 为什么是JavaScript2
1.2.2 为什么叫Node2
1.3 Node给JavaScript带来的意义2
1.4 Node的特点4
1.4.1 异步I/O4
1.4.2 事件与回调函数6
1.4.3 单线程7
1.4.4 跨平台7
1.5 Node的应用场景8
1.5.1 I/O密集型8
1.5.2 是否不擅长CPU密集型业务8
1.5.3 与遗留系统和平共处10
1.5.4 分布式应用10
1.6 Node的使用者10
1.7 参考资源11
第2章 模块机制12
2.1 CommonJS规范13
2.1.1 CommonJS的出发点13
2.1.2 CommonJS的模块规范14
2.2 Node的模块实现15
2.2.1 优先从缓存加载16
2.2.2 路径分析和文件定位16
2.2.3 模块编译18
2.3 核心模块20
2.3.1 JavaScript核心模块的编译过程21
2.3.2 C/C++核心模块的编译过程22
2.3.3 核心模块的引入流程25
2.3.4 编写核心模块25
2.4 C/C++扩展模块27
2.4.1 前提条件28
2.4.2 C/C++扩展模块的编写29
2.4.3 C/C++扩展模块的编译30
2.4.4 C/C++扩展模块的加载31
2.5 模块调用栈32
2.6 包与NPM33
2.6.1 包结构34
2.6.2 包描述文件与NPM34
2.6.3 NPM常用功能37
2.6.4 局域NPM42
2.6.5 NPM潜在问题43
2.7 前后端共用模块44
2.7.1 模块的侧重点44
2.7.2 AMD规范44
2.7.3 CMD规范45
2.7.4 兼容多种模块规范45
2.8 总结46
2.9 参考资源46
第3章 异步I/O47
3.1 为什么要异步I/O47
3.1.1 用户体验48
3.1.2 资源分配49
3.2 异步I/O实现现状50
3.2.1 异步I/O与非阻塞I/O50
3.2.2 理想的非阻塞异步I/O54
3.2.3 现实的异步I/O54
3.3 Node的异步I/O56
3.3.1 事件循环56
3.3.2 观察者56
3.3.3 请求对象57
3.3.4 执行回调59
3.3.5 小结60
3.4 非I/O的异步API60
3.4.1 定时器60
3.4.2 process.nextTick()61
3.4.3 setImmediate()62
3.5 事件驱动与高性能服务器63
3.6 总结65
3.7 参考资源65
第4章 异步编程66
4.1 函数式编程66
4.1.1 高阶函数66
4.1.2 偏函数用法67
4.2 异步编程的优势与难点68
4.2.1 优势69
4.2.2 难点70
4.3 异步编程解决方案74
4.3.1 事件发布/订阅模式74
4.3.2 Promise/Deferred模式82
4.3.3 流程控制库93
4.4 异步并发控制105
4.4.1 bagpipe的解决方案105
4.4.2 async的解决方案109
4.5 总结110
4.6 参考资源110
第5章 内存控制111
5.1 V8的垃圾回收机制与内存限制111
5.1.1 Node与V8112
5.1.2 V8的内存限制112
5.1.3 V8的对象分配112
5.1.4 V8的垃圾回收机制113
5.1.5 查看垃圾回收日志119
5.2 高效使用内存121
5.2.1 作用域121
5.2.2 闭包123
5.2.3 小结124
5.3 内存指标124
5.3.1 查看内存使用情况124
5.3.2 堆外内存126
5.3.3 小结127
5.4 内存泄漏127
5.4.1 慎将内存当做缓存127
5.4.2 关注队列状态130
5.5 内存泄漏排查130
5.5.1 node-heapdump131
5.5.2 node-memwatch132
5.5.3 小结135
5.6 大内存应用135
5.7 总结136
5.8 参考资源136
第6章 理解Buffer137
6.1 Buffer结构137
6.1.1 模块结构137
6.1.2 Buffer对象138
6.1.3 Buffer内存分配139
6.2 Buffer的转换141
6.2.1 字符串转Buffer141
6.2.2 Buffer转字符串142
6.2.3 Buffer不支持的编码类型142
6.3 Buffer的拼接143
6.3.1 乱码是如何产生的144
6.3.2 setEncoding()与string_decoder()144
6.3.3 正确拼接Buffer145
6.4 Buffer与性能146
6.5 总结149
6.6 参考资源149
第7章 网络编程150
7.1 构建TCP服务150
7.1.1 TCP150
7.1.2 创建TCP服务器端151
7.1.3 TCP服务的事件153
7.2 构建UDP服务154
7.2.1 创建UDP套接字154
7.2.2 创建UDP服务器端154
7.2.3 创建UDP客户端155
7.2.4 UDP套接字事件155
7.3 构建HTTP服务155
7.3.1 HTTP156
7.3.2 http模块157
7.3.3 HTTP客户端161
7.4 构建WebSocket服务163
7.4.1 WebSocket握手164
7.4.2 WebSocket数据传输167
7.4.3 小结169
7.5 网络服务与安全169
7.5.1 TLS/SSL170
7.5.2 TLS服务172
7.5.3 HTTPS服务173
7.6 总结175
7.7 参考资源176
第8章 构建Web应用177
8.1 基础功能177
8.1.1 请求方法178
8.1.2 路径解析179
8.1.3 查询字符串180
8.1.4 Cookie181
8.1.5 Session184
8.1.6 缓存190
8.1.7 Basic认证193
8.2 数据上传195
8.2.1 表单数据195
8.2.2 其他格式196
8.2.3 附件上传197
8.2.4 数据上传与安全199
8.3 路由解析201
8.3.1 文件路径型202
8.3.2 MVC202
8.3.3 RESTful207
8.4 中间件210
8.4.1 异常处理214
8.4.2 中间件与性能215
8.4.3 小结216
8.5 页面渲染217
8.5.1 内容响应217
8.5.2 视图渲染219
8.5.3 模板220
8.5.4 Bigpipe231
8.6 总结235
8.7 参考资源235
第9章 玩转进程236
9.1 服务模型的变迁236
9.1.1 石器时代:同步236
9.1.2 青铜时代:复制进程237
9.1.3 白银时代:多线程237
9.1.4 黄金时代:事件驱动237
9.2 多进程架构238
9.2.1 创建子进程239
9.2.2 进程间通信240
9.2.3 句柄传递242
9.2.4 小结247
9.3 集群稳定之路248
9.3.1 进程事件248
9.3.2 自动重启249
9.3.3 负载均衡254
9.3.4 状态共享255
9.4 Cluster模块257
9.4.1 Cluster工作原理258
9.4.2 Cluster事件259
9.5 总结259
9.6 参考资源260
第10章 测试261
10.1 单元测试261
10.1.1 单元测试的意义261
10.1.2 单元测试介绍263
10.1.3 工程化与自动化276
10.1.4 小结277
10.2 性能测试278
10.2.1 基准测试278
10.2.2 压力测试280
10.2.3 基准测试驱动开发281
10.2.4 测试数据与业务数据的转换283
10.3 总结284
10.4 参考资源284
第11章 产品化285
11.1 项目工程化285
11.1.1 目录结构285
11.1.2 构建工具286
11.1.3 编码规范289
11.1.4 代码审查289
11.2 部署流程290
11.2.1 部署环境291
11.2.2 部署操作291
11.3 性能293
11.3.1 动静分离293
11.3.2 启用缓存294
11.3.3 多进程架构294
11.3.4 读写分离295
11.4 日志295
11.4.1 访问日志295
11.4.2 异常日志296
11.4.3 日志与数据库299
11.4.4 分割日志299
11.4.5 小结299
11.5 监控报警299
11.5.1 监控300
11.5.2 报警的实现302
11.5.3 监控系统的稳定性303
11.6 稳定性303
11.7 异构共存304
11.8 总结305
11.9 参考资源305
附录A 安装Node306
A.1 Windows系统下的Node安装306
A.2 Mac系统下Node的安装307
A.3 Linux系统下Node的安装308
A.4 总结309
A.5 参考资源309
附录B 调试Node310
B.1 Debugger310
B.2 Node Inspector311
B.2.1 安装Node Inspector312
B.2.2 错误堆栈312
B.3 总结313
附录C Node编码规范314
C.1 根源314
C.2 编码规范315
C.2.1 空格与格式315
C.2.2 命名规范317
C.2.3 比较操作318
C.2.4 字面量318
C.2.5 作用域318
C.2.6 数组与对象319
C.2.7 异步320
C.2.8 类与模块320
C.2.9 注解规范321
C.3 最佳实践321
C.3.1 冲突的解决原则321
C.3.2 给编辑器设置检测工具321
C.3.3 版本控制中的hook322
C.3.4 持续集成322
C.4 总结322
C.5 参考资源323
附录D 搭建局域NPM仓库324
D.1 NPM仓库的安装325
D.1.1 安装Erlang和CouchDB325
D.1.2 搭建NPM仓库326
D.2 高阶应用328
D.2.1 镜像仓库328
D.2.2 私有模块应用328
D.2.3 纯私有仓库329
D.3 总结331
D.4 参考资源332
《超300款系列:吃不胖的下饭菜》内容简介:发胖并不是源于吃多了,关键在于怎么吃,吃什么。有些可口美味的下饭菜吃了真的不会发胖
《国外电子与通信教材系列·无线通信》深入浅出地讲解了无线通信原理、技术和系统设计的所涉及到的各个方面。全书共分5个部分,2
《我们的历史:夏商周》内容简介:本书以时间为轴,通过一个个生动的中国历史故事将原本看似冷冰冰的、由一大串数字和人名堆砌的历
本书是最全面的机器学习教材之一。书中首先介绍了机器学习的构成要素(任务、模型、特征)和机器学习任务,接着详细分析了逻辑模
FloTHERM软件基础与应用实例 本书特色 李波编写的《flotherm软件基础与应用实例》分为软件基础入门与应用实例两大部分,共12章:第1~9章为软件基础...
IrmaBoom早年一直学习媒体艺术,积累了对各种材料的认识与处理的经验;大学毕业后进入荷兰国家印刷协会工作,对纸张、印刷、装订
本书从为什么学习程序设计语言入手,深入细致地讲解了命令式语言的主要结构及其设计与实现,内容涉及变量、数据类型、表达式和赋
《深度强化学习核心算法与应用》内容简介:强化学习是实现决策智能的主要途径之一。经历数十年的发展,强化学习领域已经枝繁叶茂,
本书以IEEE802系列标准为主介绍局域网与城域网的相关技术,涉及lOMbps以太网、快速以太网、千兆位以太网、万兆位以太网、交换式以
《中国企业对外直接投资分析报告(2017)》内容简介:本报告分为总论篇、实务篇与关注篇三部分。总论篇在描述全球国际直接投资基础
《黑洞》内容简介:1644年4月25日清晨,崇祯缢死煤山,李自成占领紫禁城。5月22日至27日,明军吴三桂部和满清联军,与李自成大战于
指纹特征提取与多特征识别 本书特色 《指纹特征提取与多特征识别》针对大人群和低质量指纹识别中的特征提取和识别问题开展研究,将扩展特征应用到实际的指纹识别系统中,...
《解析深度学习:语音识别实践》内容简介:本书是首部介绍语音识别中深度学习技术细节的专著。全书首先概要介绍了传统语音识别理论
《Presto实战》内容简介:作为高性能分布式SQL查询引擎,Presto能够针对不同的数据源高效、快速地执行交互式分析。大数据的兴起使得
《普京政治经济学》内容简介:20世纪90年代,休克疗法将处于经济社会转型中的俄罗斯推到崩溃的边缘。进入21世纪后,在普京“强国富
本书作者是设计模式的开山鼻祖之一。在本书中,他不仅通过一些通俗易懂的实例对如何运用设计模式进行了深入的讲解,而且还介绍了
《精通CSS网布布局》深入、系统地讲解了使用css进行网页布局设计的相关知识和技巧,内容包括css基础、文字和版式设计、图像控制、
《这一生关于你的风景》内容简介:我们终其一生,都在自我发现的道路上持续行走,推翻重建,自我成全。或许这条路,一辈子都走不完
逻辑与计算机科学哲学 内容简介 本书是作者自2000年以来在科学技术哲学领域研究的一些成果集,分为逻辑与思维和计算机科学哲学两编,主要包括归纳思维、逻辑真探讨、...
未来十年,将是中国农产品商业品牌崛起的“黄金十年”。中国,能不能出现“下一个褚橙”?中国,能不能出现与佳沛(Zespri)、都