序一

1995年Brendan Eich花了10天时间开发出了一门脚本语言,用来弥补Java Applet的不足,随后Marc Andreessen给它起名为Mocha。其最初的定位是,Java用于大型专业级开发,而Mocha则是给测试脚本编写人员、业余爱好者、设计师使用的。

1995年5月,Mocha被集成到了Netscape浏览器中,其不久后改名为LiveScript,当年年底网景公司和Sun公司达成协议并获得了Java商标的使用权,其正式更名为JavaScript。

有人说Sun公司的介入限制了Brendan Eich的手脚。JavaScript除了某些语法和Java类似以外,骨子里却是完全不一样的东西。

也有人说正式改名为JavaScript才使得这门语言成为浏览器执行的唯一语言。

时至今日JavaScript已经不仅仅局限于为网页做特效了,而真正发展成为一门全功能的编程语言:

· 2008年Chrome发布、V8发布;

· 2009年Node.js发布;

· 2010年NPM发布;

· 2014年12月,多位核心Node.js开发者不满于Joyent对Node.js的管理制度,创建了io.js;

· 2015年初Node.js基金会成立;

· 2015年9月Node.js 4.0发布,Node.js和io.js正式合并。

Node.js 4.0版引入了ES6的语言特性和“长期支持版本”的发布周期。

如今Node.js社区已经成为最活跃的编程社区之一,而从NPM的包数量来看,其已经超越了Java的Manven、Ruby的gem、PHP的composer。

但是Node.js仍有很多不足之处,Node.js的使用者绝大部分仅仅把Node.js作为前端开发的辅助工具。大家把Node.js作为后端主力开发平台使用时,遇到CPU密集的场景时又不得不借助Java或者Go。虽然V8引擎一直致力于让JavaScript运行得更快,但是和Java、C++相比,还有不小的性能差距。

虽然关于JavaScript的书已经汗牛充栋,但是有关Node.js原理的书却屈指可数。而目前真正能够深入介绍原理的,国内的图书中也只有朴灵的《深入浅出Node.js》了,但如今四五年过去了依然没有等到该书的第2版,而死月的这本书却可以弥补这一方面的不足。

所有的编程语言底层都会回归C/C++,Node.js的底层依赖库V8使用C++开发,libuv则使用C语言。而使用C++开发Node.js扩展将直接把擅长CPU的C++和擅长I/O的Node.js结合在了一起,弥补了JavaScript在计算密集型应用方面的不足。

我从2015年开始研究V8,认识死月的时间则更早。死月不仅仅精通C++,他也是国内的Node.js布道师之一。从我认识他起,他就一直在使用Node.js。如果你想深入了解Node.js的原理,或者想打开Node.js另一个世界的大门,这本《Node.js:来一打C++扩展》值得你精读。

——迷渡(justjavac),Flarum中文社区创始人,国内知名前端技术专家

2018年3月22日于天津