点击上方“程序人生”,选择“置顶公众号”
第一时间关注程序猿(媛)身边的故事
成为全端高手不得不读的一本书
涵盖Chrome V8 开发、libuv 开发
Node.js 的原生 C++ 扩展开发知识,一本顶三本
Node.js 不是第一个将JavaScript 带入服务端领域的技术,然而它却成为史上最热门、最有影响力的工具之一。究其原因,其一,在于Node.js 适逢后端高并发潮流,巧妙结合Reactor 模型和JavaScript 所擅长的回调风格,大大降低了开发高并发服务器应用的成本;
其二,在于恰逢浏览器大战,前端技术突飞猛进,急需一套适合JavaScript 和前端工程师的生态和工具链,Node.js 刚好成为前端JavaScript 最易上手掌握的命令行环境。在Node.js 发展得如此火热之际,Node.js 的开发体验在不断提升,上手门槛也在不断降低。
然而,如果大家真正想突破自己并成为个中高手,无论是后端程序员希望在服务端及架构方面有所建树,还是前端程序员想跨越边界,都应该去了解Node.js 的底层机制,去学习写一些Node.js 的扩展。从Node.js 的内在机制,我们可以学到更多有关计算机体系的知识,如内存管理、多线程编程等,真正向一个架构师、一个大牛迈进。
为什么值得推荐
目前市面上的图书多停留在对Node.js入门知识的讲解,如果想进一步提升功力,你会发现无书可觅,无秘籍可得!现在,《Node.js:来一打C++扩展》来了,正好可以满足你的刚需——学习完本书,你可以毫无压力地秒变全端高手!打通任督二脉,笑傲江湖!
本书在深度上远远超过了目前市面上的Node书籍。全书自始至终围绕一个主题展开:从介绍 Node.js 的包和模块规范开始,深入解析(包括但不限于剖析 Node.js 自身的源码) Node.js 的模块是如何在运行时被引入的,尤其是如何引入 C++ 模块的;接下来详细讲解了在什么时候、为何要编写 C++ 模块;借此契机,深入介绍了 Node.js 的基石 Chrome V8 和 libuv,以及异步非阻塞的原理——不仅如此,本书更教你如何在底层去驾驭它们。所以,本书以 Node.js 的 C++ 扩展为中心,衍生出对Node.js 底层风光的层层剖析,最后再回归到如何编写 Node.js 的 C++ 扩展,一气呵成。读来酣畅淋漓,痛快不已!
读完本书后,你甚至能为 Node.js 自身的添砖加瓦做出非凡贡献。
作者简介
朱凯迪,花名“死月”,国内早期 Node.js 开发者之一,现为Node.js Collaborator(核心贡献者)之一。擅造轮子,包括Node.js的C 扩展。
大咖推荐
本书包含了所有你需要了解的有关Node.js C++ 代码是如何运行和交互的知识,解释了一些你不需要知道V8 的内部机制就能理解的必要概念,并介绍了libuv 以及其他一些内容的方方面面。本书还展示了Node.js 的内置模块是如何使用V8 的API 进行构建并可在JavaScript 层面使用的——并且你也能用这种方法从头开始创建相同类型的模块。
读完本书,你将学到如何写出产品级质量的、面向未来的Node.js C++ 扩展。感兴趣的话,你甚至可以对Node.js 自身进行修改!
——安娜·亨宁森(Anna Henningsen, addaleax),Node.js 技术指导委员会成员(Node.js TSC)
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》作者
我至今仍然清晰记得,自己手写的第一个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 技术专家
本书写给谁看
在阅读本书前,希望你对Node.js 比较熟悉,并且对于C++ 这门语言至少要有一个初步的认识。当然,如果你的C++ 基础并不是很好的话,也不要怕,可以多读几遍本节最后的一段话。
本书不仅仅讲实践,还花了不少篇幅来讲解它的前驱知识,如Chrome V8 引擎开发的一些基本概念,如句柄、句柄作用域等,以及各种API 的初步介绍。另外,书中还介绍了libuv 层面的内容,尤其是在异步方面,像libuv 中的线程、同步原语,以及如何在Node.js 的主时间循环中与你自身写的线程进行跨线程通信等。这么一算,Chrome V8、libuv,加上Node.js 的C++ 扩展开发,你相当于一下子买了3 本书,是不是觉得很超值?也就是说,你阅读本书的目的不一定是想要开发Node.js 的C++ 扩展;如果你想学习Chrome V8,或者想学习libuv,也可以参考本书。
扫码购书
点击文末「阅读原文」,发现更多好书。
本期评奖规则
在本文下方留言,说说你想要这本书的理由是什么~
我们会从留言用户中,按照留言点赞数,抽取排名在第2、4和6名的3位幸运者,送出本书。
开奖时间:7月20日当天(以当天小编开奖时看到的名次顺序为准)