出版社: 电子工业出版社 ISBN:9787121336423版次:1商品编码:12380404品牌:Broadview包装:平装开本:16出版时间:2018-06-01用纸:胶版纸页数:480字数:1
内容简介
Node.js 作为近几年新兴的一种编程运行时,托 V8 引擎的福,在作为后端服务时有比较高的运行效率,在很多场景下对于我们的日常开发足够用了。不过,它还为开发者开了一个使用C++ 开发 Node.js 原生扩展的口子,让开发者进行项目开发时有了更多的选择。
《Node.js:来一打 C++ 扩展》以 Chrome V8 的知识作为基础,配合 GYP 的一些内容,将教会大家如何使用 Node.js提供的一些 API 来编写其 C++ 的原生扩展。此外,在后续的进阶章节中,还会介绍原生抽象NAN 以及与异步相关的 libuv 知识,最后辅以几个实例来加深理解。不过,在学习本书内容之前,希望读者已经具备了初步的 Node.js 以及 C++ 基础。
阅读《Node.js:来一打 C++ 扩展》,相当于同时学习Chrome V8 开发、libuv 开发以及 Node.js 的原生 C++ 扩展开发知识,非常值得!
精彩书评
This book contains absolutely everything you need to know about how all the pieces of Node.js’ C++ code work and interact, explaining the necessary concepts without needing prior knowledge about the internals of V8, libuv or other pieces of Node.js. It shows well how Node.js’ own builtin modules are constructed using the APIs provided by V8, so that they are usable from ,and how you can create the same kind of modules from scratch.After having read this book, you will be able to write a production-quality, future-proof C++ extension for Node.js if you need to do that, or maybe even make changes Node.js itself if you’re interested in that!
本书包含了所有你需要了解的有关Node.js C++ 代码是如何运行和交互的知识,解释了一些你不需要知道V8 的内部机制就能理解的必要概念,并介绍了libuv 以及其他一些内容的方方面面。本书还展示了Node.js 的内置模块是如何使用V8 的API 进行构建并可在 层面使用的——并且你也能用这种方法从头开始创建相同类型的模块。
读完本书,你将学到如何写出产品级质量的、面向未来的Node.js C++ 扩展。感兴趣的话,你甚至可以对Node.js 自身进行修改!
——安娜·亨宁森(Anna Henningsen, addaleax),Node.js 技术指导委员会成员(Node.js TSC)
Node.js 不是第个将 带入服务端领域的技术,然而它却成为史上热门、有影响力的工具之一。究其原因,其一,在于Node.js 适逢后端高并发潮流,巧妙结合Reactor 模型和 所擅长的回调风格,大大降低了开发高并发服务器应用的成本;IV Node.js:来一打C++ 扩展
其二,在于恰逢浏览器大战,前端技术突飞猛进,急需一套适合 和前端工程师的生态和工具链,Node.js 刚好成为前端 易上手掌握的命令行环境。在Node.js 发展得如此火热之际,Node.js 的开发体验在不断提升,上手门槛也在不断降低。
然而,如果大家真正想突破自己并成为个中高手,无论是后端程序员希望在服务端及架构方面有所建树,还是前端程序员想跨越边界,都应该去了解Node.js 的底层机制,去学习写一些Node.js 的扩展。从Node.js 的内在机制,我们可以学到更多有关计算机体系的知识,如内存管理、多线程编程等,真正向一个架构师、一个大牛迈进。
本书在这些方面提供了一个非常系统的指南。死月通过精彩的内容告诉大家:底层的知识并不枯燥,用C++ 写一个扩展很有意思也很简单。作为Node.js 工程师/ 爱好者的你,值得拥有本书。
——曹力(ShiningRay),酷链科技 CEO,暴走漫画前CTO,糗事百科前联合创始人,高级 Node.js 技术专家,《 高级程序设计》译者
Native module is one of the most underappreciated features of Node.js. But even in the age of asm.js and WebAssembly, it is an irreplaceable part of the Node.js ecosystem due to its versatility and performance. XadillaX’s book provides a refreshing introduction (or eintroduction), and is a must-read for all low-level Node.js engineers.
原生模块是Node.js 中被低估的功能之一。因为自身的性能和多样性,使其即使是在asm.js 和WebAssembly 时代,仍旧能作为Node.js 生态系统中不可替代的部分存在。死月的书对其进行了一个令人耳目一新的介绍,它是所有底层(Low-Level)Node.js 工程师的必读之物。
——顾天骋(Timothy Gu),pug、ejs 前Maintainer,Node.js Core Collaborator 之一
本书全面讲解了V8、libuv 的原理并且手把手教你编写一打Node.js 的C++ 扩展,它是目前市面上相关领域非常稀缺的技术书籍。如果你想更深入地了解Node.js 的实现原理,除了熟读内置API 文档之外,阅读本书也会是一个很好的选择。
——雷宗民(老雷),《Node.js 实战》作者之一
这是一本角度“刁钻”的Node.js 相关书籍,其与市面上大多数Node.js 书籍的定位不同。本书借为Node.js 开发C++ 扩展做基石,顺带介绍了Chrome V8 和libuv 的内容,填补了市场上这一类书籍的空白,值得一读。
——李启雷博士,趣链科技CTO
无论是基础部分的V8 练习,还是使用Node.js 经典的Addon 开发、用NAN 来改写,或是libuv 里的WatchDog 案例、EFSW 的封装,死月一直把实战贯穿在整本书之中。甚至在第8 章里他还特意剖析了两个C++ 模块,把之前讲解的基础知识部分综合起来,以便让读者可以边学边练。
在如今追求大而全的时代,这本《Node.js:来一打C++ 扩展》单纯地讲Node.js 的某一个方面,而且讲得特别棒,真的很难得。
——刘琥(响马),西祠胡同创始人,fibjs 作者
当你掌握了Node.js 的上层使用,下一步进阶的方向就是研究Node.js 的底层原理。本书为学习Node.js 的实现机制打开了一扇门。书中介绍的上下文(Context)、句柄(Handle)、句柄作用域(Handle Scope)等概念直接来自源码,对于阅读Node.js 及V8 的源码具有极高的参考价值。
——潘旻琦(pmq20),Node.js 技术专家,Node.js Collaborator 之一,RubyConf 讲师之一
国内Node.js 偏向于原理的书目前只有朴灵的《深入浅出Node.js》一本。至今4 年过去了,Node.js 的版本已经从v0.10 发展到v9,中间几乎没有这样系统、有深度的书籍。
很高兴死月的新书弥补了这一遗憾。本书以C++ 为主线,涵盖Node.js 核心的libuv和V8,对理解Node.js 原理有极大的好处。当然好处在于,使用C++ 编写Node.jsAddon 可以让Node.js 有更广阔的应用空间。我们都知道Node.js 擅长的是I/O 密集型任务,对于CPU 密集型运算这是极好的弥补。
特别推荐大家阅读此书,在Node.js 应用极其广泛的今天,使用C++ 编写Node.jsAddon 是更出彩的部分,你值得拥有。
——桑世龙(i5ting、狼叔),StuQ 明星讲师,Node.js 技术布道者,《更了不起的Node.js》作者
死月对Node.js 底层机制有非常深入的了解。阅读本书,除了学习C++ 扩展开发外,还会跟随死月了解V8、libuv,相信大家对于Node.js 的理解会更上一层楼。
——孙信宇(芋头),大搜车无线架构团队负责人,前端乱炖站长
C++ 扩展其实是从外在,用C++ 的角度去观察Node.js 内在的形式。因为Node.js 整个系统自身几乎就是构建在C/C++ 之上的,所以C++ 扩展只是在Node.js 内部被称为内置模块(built-in module),在第三方角度(user-land)则被称为Addon,它们在本质上其实没有区别。死月凭借他在C/C++ 方面的深厚积累,选择从C++ 扩展作为突破口,带大家领略Node.js 底层的风光。在本书中,你能看到真正发挥巨大价值的V8、libuv 亦是精彩纷呈。
死月将C++ 扩展写得这么透彻,我是服的。
——田永强(朴灵),高级Node.js 技术专家,《深入浅出Node.js》作者
开发C++ 扩展,可以扩充Node.js 平台的本地API,扩充Node.js 应用的能力。本书详细介绍了包括libuv、V8 在内的各种必要知识,是该领域比较难得的好书。对C++ 开发者来说,本书既可以作为入门指引,又可以作为日常开发的有益参考。
——王文睿博士(Roger Wang),node-webkit 和NW.js 项目创始人和维护者,英特尔软件架构师
我至今仍然清晰记得,自己手写的第个Node.js C++ 扩展模块在Node.js 0.6.9 跑通的那种愉悦感。随着应用升级到Node.js 0.8,依赖的C++ 扩展模块无法安装编译成功,最后发现是V8 的API 变化导致不兼容,从此我对C++ 扩展模块产生了抗拒心理。如今看到《Node.js:来一打C++扩展》从实现原理到V8基础概念的一系列介绍,让我重新对C++扩展模块产生了兴趣。参考本书中的实战例子,并在NAN 的辅助下,编写一个跨Node.js 版本的C++ 扩展已经不是什么困难的事情了。通过后一章,读者可以了解到Node.js 官方的N-API 计划,让C++ 扩展不仅仅能跨版本复用,还能跨操作系统(平台)复用。
——袁锋(fengmk2),Node.js 技术专家
目录
1 Node.js 的 C++ 扩展前驱知识储备 1
1.1 Node.js 的模块机制 2
1.1.1 CommonJS 的模块规范 2
1.1.2 Node.js 的模块 4
1.1.3 小结 9
1.1.4 参考资料 9
1.2 Node.js 的包机制 9
1.2.1 CommonJS 的包规范 9
1.2.2 Node.js / NPM 下的包 13
1.2.3 NPM 与 CNPM 16
1.2.4 小结 19
1.2.5 参考资料 19
1.3 Node.js 依赖简介 20
1.3.1 Chrome V8 20
1.3.2 libuv 25
1.3.3 其他依赖 28
1.3.4 小结 30
1.3.5 参考资料 30
1.4 C++ 扩展开发的准备工作 31
1.4.1 编辑器 / IDE 31
1.4.2 node-gyp 36
1.4.3 其他构建工具 54
1.4.4 小结 56
1.4.5 参考资料 56
2 C++ 模块原理简析 57
2.1 为什么要写 C++ 模块 57
2.1.1 C++ 比 解释器高效 57
2.1.2 已有的 C++ 轮子 72
2.1.3 小结 77
2.1.4 参考资料 77
2.2 什么是 C++ 扩展 78
2.2.1 C++ 模块本质 78
2.2.2 Node.js 模块加载原理 80
2.2.3 小结 102
2.2.4 参考资料 103
3 Chrome V8 基础 104
3.1 Node.js 与 Chrome V8 104
3.2 基本概念 105
3.2.1 内存机制 105
3.2.2 隔离实例(Isolate) 108
3.2.3 上下文(Context) 109
3.2.4 脚本(Script) 110
3.2.5 小结 110
3.2.6 参考资料 111
3.3 句柄(Handle) 111
3.3.1 本地句柄(Local) 112
3.3.2 持久句柄(Persistent) 115
3.3.3 永生句柄(Eternal) 119
3.3.4 待实本地句柄(Maybe Local) 119
3.3.5 小结 121
3.3.6 参考资料 121
3.4 句柄作用域 121
3.4.1 一般句柄作用域(Handle Scope) 122
3.4.2 可逃句柄作用域(Escapable Handle Scope) 125
3.4.3 小结 129
3.4.4 参考资料 129
《Node.js调试指南(全彩)》并不适合Node.js 初学者,适合有一定Node.js 开发经验的人阅读。笔者倾向于将本书定位成参考书,每一小节基本独立,如果遇到相关问题,则可以随时翻到相应的章节进行阅读。
作者简介
赵坤,网名nswbmw,资深 Node.js开发者,开源项目Paloma、Mongolass和EverBlog作者,崇尚开源,热爱分享。
曾出版《Node.js实战(双色)》和《Node.js实战(第2季)》。
目 录
第1 章 CPU 1
1.1 理解perf 与火焰图(FlameGraph) 2
1.1.1 perf 2
1.1.2 火焰图 6
1.1.3 红蓝差分火焰图 8
1.2 使用 v8-profiler 分析 CPU 的使用情况 11
1.3 Tick Processor 及Web UI 16
1.3.1 Tick Processor 16
1.3.2 Web UI 21
第2 章 内存 23
2.1 gcore 与llnode 24
2.1.1 Core 和 Core Dump 24
2.1.2 gcore 25
2.1.3 llnode 25
2.1.4 测试 Core Dump 26
2.1.5 分析Core 文件 27
2.1.6 --abort-on-uncaught-exception29
2.1.7 小结 30
2.2 heapdump 30
2.2.1 使用heapdump 30
2.2.2 Chrome DevTools 32
2.2.3 对比快照 34
2.3 memwatch-next 35
2.3.1 使用memwatch-next 35
2.3.2 使用Heap Diff 38
2.3.3 结合 heapdump 使用 40
2.4 cpu-memory-monitor 41
2.4.1 使用cpu-memory-monitor 41
2.4.2 cpu-memory-monitor 源码解读 43
第3 章 代码 46
3.1 Promise 47
3.1.1 Promise/A 规范 48
3.1.2 从零开始实现 Promise 48
3.1.3 Promise 的实现原理 50
3.1.4 safelyResolveThen 52
3.1.5 doResolve 和 doReject 54
3.1.6 Promise.prototype.then 和 Promise.prototype.catch 55
3.1.7 值穿透 58
3.1.8 Promise.resolve 和 Promise.reject 60
3.1.9 Promise.all 61
3.1.10 Promise.race 62
3.1.11 代码解析 63
3.2 Async Await 69
3.2.1 例1 :async await 70
3.2.2 例2 :co yield 71
3.2.3 例3 :co yield* 72
3.2.4 例4 :co bluebird 73
3.2.5 从yield 转为yield* 遇到的坑 75
3.2.6 async bluebird 76
3.3 Error Stack 77
3.3.1 Stack Trace 78
3.3.2 Error.captureStackTrace80
3.3.3 captureStackTrace 在 Mongolass 中的应用 83
3.3.4 Error.prepareStackTrace84
3.3.5 Error.prepareStackTrace的其他用法 86
3.3.6 Error.stackTraceLimit88
3.3.7 Long Stack Trace 88
3.4 node@8 89
3.4.1 Ignition Turbofan 90
3.4.2 版本的对应关系 91
3.4.3 try/catch 91
3.4.4 delete 93
3.4.5 arguments 95
3.4.6 async 性能提升 97
3.4.7 不会优化的特性 98
3.5 Rust Addons 100
3.5.1 Rust 100
3.5.2 FFI 100
3.5.3 Neon 103
3.5.4 NAPI 108
3.6 Event Loop 110
3.6.1 什么是 Event Loop 110
3.6.2 poll 阶段 112
3.6.3 process.nextTick() 112
3.6.4 代码解析 113
3.7 处理 uncaughtException 120
评价五 对于我这样一个经验丰富的开发者来说,找到一本能够真正引发思考、提升认知深度的书籍并不容易。而《Node.js 来一打 C++ 扩展+Node.js调试指南》恰恰就是这样一本令人惊喜的作品。它不仅提供了实操性的技能指导,更重要的是,它帮助我构建了一个更完整的Node.js技术图景。在C++扩展方面,书中对v8引擎的深入讲解,让我对JavaScript的底层运行机制有了全新的认识,这对于我理解和优化Node.js应用至关重要。而在调试指南部分,它并没有停留在表面的工具介绍,而是深入探讨了各种调试场景下的策略和方法,让我能够以更高效、更系统的方式来解决疑难杂症。这本书的价值在于,它将Node.js的“前端”和“后端”——即JavaScript的开发与C++的底层扩展——以及整个开发过程中的关键环节——调试——完美地融合在一起,形成了一个有机的整体。这使得我不再仅仅将Node.js视为一个简单的JavaScript运行时,而是对其有了更深层次的理解和掌控力。
评分评价一 作为一名Node.js开发者,我一直觉得自己的技术栈中缺少了核心的底层能力,特别是当涉及到性能优化或者需要集成C/C++库的时候,就会显得力不从心。这次偶然的机会发现了这本《Node.js 来一打 C++ 扩展+Node.js调试指南》,虽然书名听起来有点儿“接地气”,但内容却绝对是干货满满。这本书巧妙地将C++的强大性能与Node.js的灵活性结合起来,让我第一次真正理解了如何构建高性能的Node.js应用。从最基础的C++模块开发入门,到如何处理数据类型的转换,再到如何实现异步操作,书中都进行了详尽的讲解。我尤其喜欢它关于内存管理和错误处理的部分,这对于编写稳定可靠的C++扩展至关重要。而且,书中提供的案例都非常贴合实际开发场景,比如如何将一个计算密集型的算法用C++实现,然后通过Node.js调用,从而大幅提升程序的执行效率。以前觉得Node.js在性能上有所局限,但读完这本书后,我才意识到,只要合理地利用C++扩展,Node.js的潜力是无穷的。对于那些想要深入理解Node.js底层原理,或者希望提升应用性能的开发者来说,这本书绝对是不可多得的宝藏。
评分评价四 坦白说,我一开始选择这本书,主要是被“Node.js 来一打 C++ 扩展”这个标题吸引。我一直觉得Node.js的性能瓶颈是其在某些领域发展的最大制约,而C++无疑是解决这一问题的绝佳方案。这本书果然没有让我失望,它系统地梳理了Node.js C++扩展的整个生态系统,从基本的原理到实际的应用,都进行了深入的剖析。书中详细介绍了addon和native module的概念,并重点讲解了如何使用node-gyp来编译和构建C++扩展。我特别欣赏书中关于线程安全和事件循环集成的内容,这对于开发稳定可靠的C++扩展至关重要。通过书中的案例,我掌握了如何将一些CPU密集型的计算任务,比如图像处理、加密解密等,通过C++实现,然后在Node.js中高效调用,大大提升了应用的响应速度。这本书不仅为我打开了通往高性能Node.js应用的大门,更让我认识到,Node.js的灵活性和可扩展性远超我的想象。
评分评价三 作为一名刚刚接触Node.js不久的开发者,我对各种框架和库都充满了好奇,但也常常因为一些底层机制不理解而感到困惑。这本书的“C++可扩展模块开发”部分,虽然一开始让我有些畏惧,但读下去之后才发现,它其实是以一种非常友好的方式引导我进入了Node.js的“幕后世界”。书中并没有直接抛出晦涩的C++语法,而是从Node.js需要C++扩展的根本原因讲起,循序渐进地介绍了如何使用v8这个强大的JavaScript引擎来编写原生模块。我学会了如何定义JavaScript接口,如何将C++函数暴露给JavaScript,以及如何处理JavaScript和C++之间的数据传递。最令我印象深刻的是,书中详细讲解了如何利用nan这个库来简化C++扩展的开发,极大地降低了开发门槛。通过书中提供的丰富示例,我不仅学会了编写简单的C++插件,还能够理解如何将一些高性能的算法移植到Node.js环境中,从而在性能方面获得显著提升。这本书让我看到了Node.js的无限可能,也让我对未来的技术探索充满了信心。
评分评价二 长期以来,Node.js调试都是我的一大痛点,尤其是在处理一些复杂的回调链或者异步流程时,定位问题的难度简直让人抓狂。这次有幸阅读了《Node.js 来一打 C++ 扩展+Node.js调试指南》中的调试指南部分,简直是为我量身定做的“救命稻草”。书中系统地介绍了Node.js的各种调试技巧和工具,从基础的console.log到更加专业的Chrome DevTools,再到V8 Inspector协议,无所不包。我学到了如何设置断点、单步执行、查看变量值、监控内存使用等一系列实用技能。特别是关于异步代码的调试,书中给出了非常清晰的思路和方法,让我能够更有效地追踪异步操作的执行路径,找出隐藏的bug。而且,书中还结合了C++扩展的场景,讲解了如何在调试JavaScript代码的同时,也能够深入到C++的底层代码中进行调试,这对于我来说是全新的体验,也极大地解决了我在调试混合语言项目时遇到的难题。总而言之,这本书的调试指南部分,不仅提升了我解决问题的效率,更让我对Node.js的运行机制有了更深刻的理解,让我能够更自信地应对各种棘手的bug。
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 book.cndgn.com All Rights Reserved. 新城书站 版权所有