Node.js:来一打 C++ 扩展 封面

Node.js:来一打 C++ 扩展

评分 3.8
字数
16.4万字
章节数
221
ISBN
9787121336423

标签

内容简介

本书讲解了如何在 Node.js 上写 C++ 的原生模块以供使用,包括且不仅限于一些 API 和原理的介绍,但是不包括 Node.js 的基础入门知识(如语法等)。目标是读者能用 C++ 写出 Node.js 原生模块来提高开发和运行效率。

编辑推荐

《Node.js:来一打 C++ 扩展》是国内技术社区知名作者死月(本名李喆明)的力作,填补了Node.js原生扩展开发系统性教材的市场空白。本书不仅是一本技术指南,更是作者多年在蚂蚁集团等一线互联网企业实战经验的结晶。从Node.js与V8引擎的基础交互原理讲起,逐步深入到异步I/O、线程管理、N-API等进阶话题,最后以实际项目案例收尾,形成了完整的学习闭环。

与其他Node.js书籍不同,本书特别聚焦于C++扩展开发的‘深水区’——如何让JavaScript与C++高效、安全地协作。作者巧妙地将复杂的底层机制拆解为可操作的步骤,比如第4章对V8对象生命周期的图解,第7章对异步工作队列的线程安全分析,都体现了工程实践的严谨性。书中对Node.js 12+版本引入的N-API进行了重点解读,这对希望编写跨版本稳定扩展的开发者至关重要。

技术深度与可读性的平衡是本书的亮点。作者既解释了‘为什么’(如V8垃圾回收机制对扩展设计的影响),也详细演示了‘怎么做’(包括CMake配置、错误处理规范等)。随书附赠的完整示例代码进一步降低了学习门槛。对于已掌握Node.js基础、希望深入运行时优化或参与底层框架开发的工程师,这本书提供了难得的‘地图’和‘工具’。

适合谁读

适合

  • 具有2年以上Node.js开发经验、希望深入理解运行时机制的工程师
  • 需要为Node.js性能瓶颈编写原生扩展或插件的项目核心开发者
  • 对V8引擎、libuv等底层技术感兴趣并希望系统学习的研究者
  • 技术团队中负责基础架构或性能优化方向的技术负责人

不适合

  • 刚接触Node.js、尚在入门阶段的新手开发者
  • 仅从事前端界面开发、无需接触后端运行机制的工程师

阅读建议

  1. 建议先通读第1-3章建立基础概念,再根据实际需求跳转到对应专题章节
  2. 阅读时最好配合书中的示例代码进行实践,尝试修改参数观察不同效果
  3. 可结合Node.js官方文档中关于N-API的部分进行对照阅读,加深理解

出版社简介

电子工业出版社 中国 · 成立于 1982 年

电子工业出版社是一家以电子信息及相关领域为出版特色的综合性出版社。从库内三千余种图书来看,其出版方向覆盖编程设计、人工智能、计算机综合、财经、摄影与社科等门类,既关注技术前沿,也兼顾大众阅读。代表图书包括《因子投资:方法与实践》《x86汇编语言:从实模式到保护模式》《RISC-V开放架构设计之道》《人工智能:语音识别理解与实践》《相控阵雷达技术》《雷达目标特性》及《100个Go语言典型错误》等,多围绕技术方法与工程实践展开。作者资源方面,有石川、李忠、王晓波、大卫·帕特森、安德鲁·沃特曼、余子濠等中外作者。受公开资料所限,暂不展开更多出版特色。

目录

  1. 版权信息
  2. 好评袭来
  3. 序一
  4. 序二
  5. 前言
  6. 1 Node.js的C++扩展前驱知识储备
  7. 1.1 Node.js的模块机制
  8. 1.1.1 CommonJS的模块规范
  9. 1.1.2 Node.js的模块
  10. 1.1.3 小结
  11. 1.1.4 参考资料
  12. 1.2 Node.js的包机制
  13. 1.2.1 CommonJS的包规范
  14. 1.2.2 Node.js/NPM下的包
  15. 1.2.3 NPM与CNPM
  16. 1.2.4 小结
  17. 1.2.5 参考资料
  18. 1.3 Node.js依赖简介
  19. 1.3.1 Chrome V8
  20. 1.3.2 libuv
  21. 1.3.3 其他依赖
  22. 1.3.4 小结
  23. 1.3.5 参考资料
  24. 1.4 C++扩展开发的准备工作
  25. 1.4.1 编辑器/IDE
  26. 1.4.2 node-gyp
  27. 1.4.3 其他构建工具
  28. 1.4.4 小结
  29. 1.4.5 参考资料
  30. 2 C++模块原理简析
  31. 2.1 为什么要写C++模块
  32. 2.1.1 C++比JavaScript解释器高效
  33. 2.1.2 已有的C++轮子
  34. 2.1.3 小结
  35. 2.1.4 参考资料
  36. 2.2 什么是C++扩展
  37. 2.2.1 C++模块本质
  38. 2.2.2 Node.js模块加载原理
  39. 2.2.3 小结
  40. 2.2.4 参考资料
  41. 3 Chrome V8基础
  42. 3.1 Node.js与Chrome V8
  43. 3.2 基本概念
  44. 3.2.1 内存机制
  45. 3.2.2 隔离实例(Isolate)
  46. 3.2.3 上下文(Context)
  47. 3.2.4 脚本(Script)
  48. 3.2.5 小结
  49. 3.2.6 参考资料
  50. 3.3 句柄(Handle)
  51. 3.3.1 本地句柄(Local)
  52. 3.3.2 持久句柄(Persistent)
  53. 3.3.3 永生句柄(Eternal)
  54. 3.3.4 待实本地句柄(Maybe Local)
  55. 3.3.5 小结
  56. 3.3.6 参考资料
  57. 3.4 句柄作用域
  58. 3.4.1一般句柄作用域(Handle Scope)
  59. 3.4.2 可逃句柄作用域(Escapable Handle Scope)
  60. 3.4.3 小结
  61. 3.4.4 参考资料
  62. 3.5 上下文(Context)
  63. 3.6 模板(Template)
  64. 3.6.1 函数模板(Function Template)
  65. 3.6.2 对象模板(Object Template)
  66. 3.6.3 对象模板的访问器(Accessor)与拦截器(Interceptor)
  67. 3.6.4 对象模板的内置字段(Internal Field)
  68. 3.6.5 函数模板的继承(Inherit)
  69. 3.6.6 小结
  70. 3.6.7 参考资料
  71. 3.7 常用数据类型
  72. 3.7.1 基值(Value)
  73. 3.7.2 字符串(String)
  74. 3.7.3 数值类型
  75. 3.7.4 布尔类型(Boolean)
  76. 3.7.5 对象(Object)
  77. 3.7.6 函数(Function)
  78. 3.7.7 数组(Array)
  79. 3.7.8 JSON解析器
  80. 3.7.9 函数回调信息(Function Callback Info)
  81. 3.7.10 函数返回值(Return Value)
  82. 3.7.11 隔离实例(Isolate)
  83. 3.7.12 小结
  84. 3.7.13 参考资料
  85. 3.8 异常机制
  86. 3.8.1 try-catch
  87. 3.8.2 抛出异常
  88. 3.8.3 异常生成类(Exception)
  89. 3.8.4 小结
  90. 3.8.5 参考资料
  91. 4 C++扩展实战初探
  92. 4.1 binding.gyp
  93. 4.1.1 惊鸿一瞥
  94. 4.1.2 binding.gyp基础结构
  95. 4.1.3 GYP文件
  96. 4.1.4 常用字段
  97. 4.1.5 小结
  98. 4.1.6 参考资料
  99. 4.2 牛刀小试
  100. 4.2.1 又是Hello World
  101. 4.2.2 函数参数
  102. 4.2.3 回调函数
  103. 4.2.4 函数返回
  104. 4.2.5 小结
  105. 4.2.6 参考资料
  106. 4.3 循序渐进
  107. 4.3.1 C++与JavaScript类封装
  108. 4.3.2 实例化C++类封装对象的函数
  109. 4.3.3 将C++类封装对象传来传去
  110. 4.3.4 进程退出钩子
  111. 4.3.5 小结
  112. 4.3.6 参考资料
  113. 5 Node.js原生抽象——NAN
  114. 5.1 Node.js原生模块开发方式的变迁
  115. 5.1.1 以不变应万变
  116. 5.1.2 时代在召唤
  117. 5.1.3 小结
  118. 5.1.4 参考资料
  119. 5.2 基础开发
  120. 5.2.1 什么是NAN
  121. 5.2.2 安装和配置
  122. 5.2.3 先睹为快——搭上NAN的快车
  123. 5.2.4 基础帮助函数和宏
  124. 5.2.5 忽略node_modules
  125. 5.2.6 小结
  126. 5.2.7 参考资料
  127. 5.3 JavaScript函数
  128. 5.3.1 函数参数类型
  129. 5.3.2 函数声明
  130. 5.3.3 函数设置
  131. 5.3.4 小结
  132. 5.3.5 参考资料
  133. 5.4 常用帮助类与函数
  134. 5.4.1 句柄相关
  135. 5.4.2 创建数据对象
  136. 5.4.3 与数据对象“玩耍”
  137. 5.4.4 封装一个类
  138. 5.4.5 异常处理
  139. 5.4.6 小结
  140. 5.4.7 参考资料
  141. 5.5 NAN中的异步机制
  142. 5.5.1 Nan::AsyncQueueWorker
  143. 5.5.2 Nan::Callback
  144. 5.5.3 Nan::AsyncWorker
  145. 5.5.4 Nan::AsyncProgressWorker
  146. 5.5.5 小结
  147. 5.5.6 参考资料
  148. 6 异步之旅——libuv
  149. 6.1 基础概念
  150. 6.1.1 事件循环
  151. 6.1.2 句柄(Handle)与请求(Request)
  152. 6.1.3 尝尝甜头
  153. 6.1.4 小结
  154. 6.1.5 参考资料
  155. 6.2 libuv的跨线程编程基础
  156. 6.2.1 libuv的线程
  157. 6.2.2 同步原语(Synchronization Primitive)
  158. 6.2.3 工作队列
  159. 6.2.4 小结
  160. 6.2.5 参考资料
  161. 6.3 跨线程通信
  162. 6.3.1 uv_async_t句柄
  163. 6.3.2 Watchdog半成品实战解析
  164. 6.3.3 Watchdog试运行
  165. 6.3.4 小结
  166. 6.3.5 参考资料
  167. 7 实战——文件监视器
  168. 7.1 准备工作
  169. 7.1.1 功能规划
  170. 7.1.2 文件系统监听库——efsw
  171. 7.1.3 小结
  172. 7.1.4 参考资料
  173. 7.2 核心设计
  174. 7.2.1 API设计
  175. 7.2.2 EFSWCore的血肉之躯
  176. 7.2.3 EFSWCore的灵魂
  177. 7.2.4 小结
  178. 7.3 编写JavaScript类
  179. 7.3.1 类的设计
  180. 7.3.2 核心逻辑
  181. 7.3.3 简单容错
  182. 7.3.4 小结
  183. 7.4 进一步完善
  184. 7.4.1 C++代码的完善
  185. 7.4.2 JavaScript代码的完善
  186. 7.4.3 小结
  187. 8 实战——现有包剖析
  188. 8.1 字符串哈希模块——Bling Hashes
  189. 8.1.1 文件设定
  190. 8.1.2 C++源码剖析
  191. 8.1.3 JavaScript源码剖析
  192. 8.1.4 小结
  193. 8.1.5 参考资料
  194. 8.2 类Proxy包——Auto Object
  195. 8.2.1 Proxy
  196. 8.2.2 Auto Object使用范例
  197. 8.2.3 代码剖析
  198. 8.2.4 小结
  199. 8.2.5 参考资料
  200. 9 N-API——下一代Node.js C++扩展开发方式
  201. 9.1 浅尝辄止
  202. 9.1.1 实现一个Echo函数
  203. 9.1.2 尝试运行N-API扩展
  204. 9.1.3 向下兼容
  205. 9.1.4 N-API Package——C++封装
  206. 9.1.5 小结
  207. 9.1.6 参考资料
  208. 9.2 基本数据类型与错误处理
  209. 9.2.1 基本数据类型
  210. 9.2.2 与作用域及生命周期相关的数据类型
  211. 9.2.3 回调数据类型
  212. 9.2.4 错误处理
  213. 9.2.5 模块注册
  214. 9.2.6 小结
  215. 9.2.7 参考资料
  216. 9.3 对象与函数
  217. 9.3.1 对象
  218. 9.3.2 函数
  219. 9.3.3 类的封装
  220. 9.3.4 小结
  221. 9.3.5 参考资料

常见问题

阅读本书前需要具备哪些前置知识?
需要熟练掌握JavaScript和Node.js基础开发,了解基本的C/C++语法和编译概念。对操作系统原理和数据结构有基本认知会更易理解。
书中内容是否适用于最新版本的Node.js?
作者重点讲解了Node.js 12+版本引入的N-API机制,该API设计为向后兼容,因此核心原理适用于当前主流版本。部分V8引擎细节可能随版本更新有微小差异,但书中的设计思想和方法论具有长期参考价值。
这本书与国外同类技术书籍相比有何特色?
本书更贴近国内开发环境和工程实践需求,案例设计考虑了中文处理等本地化场景。作者在蚂蚁集团的大规模应用经验为书中的性能优化、内存管理等议题提供了经过验证的解决方案,这是国外书籍较少覆盖的视角。

读者评论

查询本书

本站为索引目录:「全网查询」由您发起、在您的浏览器中运行,所列入口均指向第三方站点,请自行判断可用性。

作者简介

死月 作者

死月是一位公开资料有限的编程类图书作者,目前库内仅收录其作品一种,即《Node.js:来一打 C++ 扩展》。从书名与常见分类“编程设计”来看,该书聚焦 Node.js 与 C++ 扩展开发的结合,属于面向开发者的技术实践类读物。作者围绕这一主题展开写作,内容指向底层实现与工程应用,而非泛泛的入门介绍,因而在选题上具有一定针对性。由于生卒年、国籍与英文名等信息均未明确,其个人经历与创作背景尚无从考证,读者只能通过这一部作品了解其技术关注点。整体而言,死月的写作风格偏向务实、具体,适合已具备一定基础、希望深入理解 Node.js 扩展机制的读者参考。

同一作者

同类高分