好评袭来

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 built-in modules are constructed using the APIs provided by V8,so that they are usable from JavaScript,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进行构建并可在JavaScript层面使用的——并且你也能用这种方法从头开始创建相同类型的模块。

读完本书,你将学到如何写出产品级质量的、面向未来的Node.js C++扩展。感兴趣的话,你甚至可以对Node.js自身进行修改!

——安娜·亨宁森(Anna Henningsen,addaleax)

Node.js技术指导委员会成员(Node.js TSC)

Node.js不是第一个将JavaScript带入服务端领域的技术,然而它却成为史上最热门、最有影响力的工具之一。究其原因,其一,在于Node.js适逢后端高并发潮流,巧妙结合Reactor模型和JavaScript所擅长的回调风格,大大降低了开发高并发服务器应用的成本;其二,在于恰逢浏览器大战,前端技术突飞猛进,急需一套适合JavaScript和前端工程师的生态和工具链,Node.js刚好成为前端JavaScript最易上手掌握的命令行环境。在Node.js发展得如此火热之际,Node.js的开发体验在不断提升,上手门槛也在不断降低。

然而,如果大家真正想突破自己并成为个中高手,无论是后端程序员希望在服务端及架构方面有所建树,还是前端程序员想跨越边界,都应该去了解Node.js的底层机制,去学习写一些Node.js的扩展。从Node.js的内在机制,我们可以学到更多有关计算机体系的知识,如内存管理、多线程编程等,真正向一个架构师、一个大牛迈进。

本书在这些方面提供了一个非常系统的指南。死月通过精彩的内容告诉大家:底层的知识并不枯燥,用C++写一个扩展很有意思也很简单。作为Node.js工程师/爱好者的你,值得拥有本书。

——曹力(ShiningRay)

酷链科技CEO,暴走漫画前CTO,糗事百科前联合创始人,高级Node.js技术专家,《JavaScript高级程序设计》译者

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 reintroduction),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.js Addon可以让Node.js有更广阔的应用空间。我们都知道Node.js擅长的是I/O密集型任务,对于CPU密集型运算这是极好的弥补。

特别推荐大家阅读此书,在Node.js应用极其广泛的今天,使用C++编写Node.js Addon是更出彩的部分,你值得拥有。

——桑世龙(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技术专家