标签
内容简介
编辑推荐
与其他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-3章建立基础概念,再根据实际需求跳转到对应专题章节
- 阅读时最好配合书中的示例代码进行实践,尝试修改参数观察不同效果
- 可结合Node.js官方文档中关于N-API的部分进行对照阅读,加深理解
出版社简介
电子工业出版社是一家以电子信息及相关领域为出版特色的综合性出版社。从库内三千余种图书来看,其出版方向覆盖编程设计、人工智能、计算机综合、财经、摄影与社科等门类,既关注技术前沿,也兼顾大众阅读。代表图书包括《因子投资:方法与实践》《x86汇编语言:从实模式到保护模式》《RISC-V开放架构设计之道》《人工智能:语音识别理解与实践》《相控阵雷达技术》《雷达目标特性》及《100个Go语言典型错误》等,多围绕技术方法与工程实践展开。作者资源方面,有石川、李忠、王晓波、大卫·帕特森、安德鲁·沃特曼、余子濠等中外作者。受公开资料所限,暂不展开更多出版特色。
目录
- 版权信息
- 好评袭来
- 序一
- 序二
- 前言
- 1 Node.js的C++扩展前驱知识储备
- 1.1 Node.js的模块机制
- 1.1.1 CommonJS的模块规范
- 1.1.2 Node.js的模块
- 1.1.3 小结
- 1.1.4 参考资料
- 1.2 Node.js的包机制
- 1.2.1 CommonJS的包规范
- 1.2.2 Node.js/NPM下的包
- 1.2.3 NPM与CNPM
- 1.2.4 小结
- 1.2.5 参考资料
- 1.3 Node.js依赖简介
- 1.3.1 Chrome V8
- 1.3.2 libuv
- 1.3.3 其他依赖
- 1.3.4 小结
- 1.3.5 参考资料
- 1.4 C++扩展开发的准备工作
- 1.4.1 编辑器/IDE
- 1.4.2 node-gyp
- 1.4.3 其他构建工具
- 1.4.4 小结
- 1.4.5 参考资料
- 2 C++模块原理简析
- 2.1 为什么要写C++模块
- 2.1.1 C++比JavaScript解释器高效
- 2.1.2 已有的C++轮子
- 2.1.3 小结
- 2.1.4 参考资料
- 2.2 什么是C++扩展
- 2.2.1 C++模块本质
- 2.2.2 Node.js模块加载原理
- 2.2.3 小结
- 2.2.4 参考资料
- 3 Chrome V8基础
- 3.1 Node.js与Chrome V8
- 3.2 基本概念
- 3.2.1 内存机制
- 3.2.2 隔离实例(Isolate)
- 3.2.3 上下文(Context)
- 3.2.4 脚本(Script)
- 3.2.5 小结
- 3.2.6 参考资料
- 3.3 句柄(Handle)
- 3.3.1 本地句柄(Local)
- 3.3.2 持久句柄(Persistent)
- 3.3.3 永生句柄(Eternal)
- 3.3.4 待实本地句柄(Maybe Local)
- 3.3.5 小结
- 3.3.6 参考资料
- 3.4 句柄作用域
- 3.4.1一般句柄作用域(Handle Scope)
- 3.4.2 可逃句柄作用域(Escapable Handle Scope)
- 3.4.3 小结
- 3.4.4 参考资料
- 3.5 上下文(Context)
- 3.6 模板(Template)
- 3.6.1 函数模板(Function Template)
- 3.6.2 对象模板(Object Template)
- 3.6.3 对象模板的访问器(Accessor)与拦截器(Interceptor)
- 3.6.4 对象模板的内置字段(Internal Field)
- 3.6.5 函数模板的继承(Inherit)
- 3.6.6 小结
- 3.6.7 参考资料
- 3.7 常用数据类型
- 3.7.1 基值(Value)
- 3.7.2 字符串(String)
- 3.7.3 数值类型
- 3.7.4 布尔类型(Boolean)
- 3.7.5 对象(Object)
- 3.7.6 函数(Function)
- 3.7.7 数组(Array)
- 3.7.8 JSON解析器
- 3.7.9 函数回调信息(Function Callback Info)
- 3.7.10 函数返回值(Return Value)
- 3.7.11 隔离实例(Isolate)
- 3.7.12 小结
- 3.7.13 参考资料
- 3.8 异常机制
- 3.8.1 try-catch
- 3.8.2 抛出异常
- 3.8.3 异常生成类(Exception)
- 3.8.4 小结
- 3.8.5 参考资料
- 4 C++扩展实战初探
- 4.1 binding.gyp
- 4.1.1 惊鸿一瞥
- 4.1.2 binding.gyp基础结构
- 4.1.3 GYP文件
- 4.1.4 常用字段
- 4.1.5 小结
- 4.1.6 参考资料
- 4.2 牛刀小试
- 4.2.1 又是Hello World
- 4.2.2 函数参数
- 4.2.3 回调函数
- 4.2.4 函数返回
- 4.2.5 小结
- 4.2.6 参考资料
- 4.3 循序渐进
- 4.3.1 C++与JavaScript类封装
- 4.3.2 实例化C++类封装对象的函数
- 4.3.3 将C++类封装对象传来传去
- 4.3.4 进程退出钩子
- 4.3.5 小结
- 4.3.6 参考资料
- 5 Node.js原生抽象——NAN
- 5.1 Node.js原生模块开发方式的变迁
- 5.1.1 以不变应万变
- 5.1.2 时代在召唤
- 5.1.3 小结
- 5.1.4 参考资料
- 5.2 基础开发
- 5.2.1 什么是NAN
- 5.2.2 安装和配置
- 5.2.3 先睹为快——搭上NAN的快车
- 5.2.4 基础帮助函数和宏
- 5.2.5 忽略node_modules
- 5.2.6 小结
- 5.2.7 参考资料
- 5.3 JavaScript函数
- 5.3.1 函数参数类型
- 5.3.2 函数声明
- 5.3.3 函数设置
- 5.3.4 小结
- 5.3.5 参考资料
- 5.4 常用帮助类与函数
- 5.4.1 句柄相关
- 5.4.2 创建数据对象
- 5.4.3 与数据对象“玩耍”
- 5.4.4 封装一个类
- 5.4.5 异常处理
- 5.4.6 小结
- 5.4.7 参考资料
- 5.5 NAN中的异步机制
- 5.5.1 Nan::AsyncQueueWorker
- 5.5.2 Nan::Callback
- 5.5.3 Nan::AsyncWorker
- 5.5.4 Nan::AsyncProgressWorker
- 5.5.5 小结
- 5.5.6 参考资料
- 6 异步之旅——libuv
- 6.1 基础概念
- 6.1.1 事件循环
- 6.1.2 句柄(Handle)与请求(Request)
- 6.1.3 尝尝甜头
- 6.1.4 小结
- 6.1.5 参考资料
- 6.2 libuv的跨线程编程基础
- 6.2.1 libuv的线程
- 6.2.2 同步原语(Synchronization Primitive)
- 6.2.3 工作队列
- 6.2.4 小结
- 6.2.5 参考资料
- 6.3 跨线程通信
- 6.3.1 uv_async_t句柄
- 6.3.2 Watchdog半成品实战解析
- 6.3.3 Watchdog试运行
- 6.3.4 小结
- 6.3.5 参考资料
- 7 实战——文件监视器
- 7.1 准备工作
- 7.1.1 功能规划
- 7.1.2 文件系统监听库——efsw
- 7.1.3 小结
- 7.1.4 参考资料
- 7.2 核心设计
- 7.2.1 API设计
- 7.2.2 EFSWCore的血肉之躯
- 7.2.3 EFSWCore的灵魂
- 7.2.4 小结
- 7.3 编写JavaScript类
- 7.3.1 类的设计
- 7.3.2 核心逻辑
- 7.3.3 简单容错
- 7.3.4 小结
- 7.4 进一步完善
- 7.4.1 C++代码的完善
- 7.4.2 JavaScript代码的完善
- 7.4.3 小结
- 8 实战——现有包剖析
- 8.1 字符串哈希模块——Bling Hashes
- 8.1.1 文件设定
- 8.1.2 C++源码剖析
- 8.1.3 JavaScript源码剖析
- 8.1.4 小结
- 8.1.5 参考资料
- 8.2 类Proxy包——Auto Object
- 8.2.1 Proxy
- 8.2.2 Auto Object使用范例
- 8.2.3 代码剖析
- 8.2.4 小结
- 8.2.5 参考资料
- 9 N-API——下一代Node.js C++扩展开发方式
- 9.1 浅尝辄止
- 9.1.1 实现一个Echo函数
- 9.1.2 尝试运行N-API扩展
- 9.1.3 向下兼容
- 9.1.4 N-API Package——C++封装
- 9.1.5 小结
- 9.1.6 参考资料
- 9.2 基本数据类型与错误处理
- 9.2.1 基本数据类型
- 9.2.2 与作用域及生命周期相关的数据类型
- 9.2.3 回调数据类型
- 9.2.4 错误处理
- 9.2.5 模块注册
- 9.2.6 小结
- 9.2.7 参考资料
- 9.3 对象与函数
- 9.3.1 对象
- 9.3.2 函数
- 9.3.3 类的封装
- 9.3.4 小结
- 9.3.5 参考资料
常见问题
阅读本书前需要具备哪些前置知识?
书中内容是否适用于最新版本的Node.js?
这本书与国外同类技术书籍相比有何特色?
读者评论
查询本书
本站为索引目录:「全网查询」由您发起、在您的浏览器中运行,所列入口均指向第三方站点,请自行判断可用性。
作者简介
死月是一位公开资料有限的编程类图书作者,目前库内仅收录其作品一种,即《Node.js:来一打 C++ 扩展》。从书名与常见分类“编程设计”来看,该书聚焦 Node.js 与 C++ 扩展开发的结合,属于面向开发者的技术实践类读物。作者围绕这一主题展开写作,内容指向底层实现与工程应用,而非泛泛的入门介绍,因而在选题上具有一定针对性。由于生卒年、国籍与英文名等信息均未明确,其个人经历与创作背景尚无从考证,读者只能通过这一部作品了解其技术关注点。整体而言,死月的写作风格偏向务实、具体,适合已具备一定基础、希望深入理解 Node.js 扩展机制的读者参考。