Node.js的核心与红利
文/田永强唯有明晰历史,才能了然当下,预知未来。作者从历史角度解读Node.js,帮助读者透过猜忌和谣言,看清真实的Node.js,了解Node.js的核心与红利。令人惴惴不安的Node.js我们越来越频繁地看到关于JavaScript的新闻,刚开始谈到的是引擎性能提升,后来则是由HTML5和Node.js带来令人叹为观止的应用。如果只看表面,容易让人产生以下各种误解。Node...
·
文/田永强 唯有明晰历史,才能了然当下,预知未来。作者从历史角度解读Node.js,帮助读者透过猜忌和谣言,看清真实的Node.js,了解Node.js的核心与红利。
令人惴惴不安的Node.js 我们越来越频繁地看到关于JavaScript的新闻,刚开始谈到的是引擎性能提升,后来则是由HTML5和Node.js带来令人叹为观止的应用。如果只看表面,容易让人产生以下各种误解。
[/caption] 可以看到,JavaScript在V8平台的表现与Luajit相差无几。借助C++模块,性能可以更进一步提升。如果需要了解最新的对比结果,可以
访问网页。 2006-2009年,JavaScript得到了进一步发展,效果主要体现在两个方面:
[/caption] 我给出的题目很简单:如果在分布式环境中,需要从不同的地方调用10次不同的数据,时间消耗为t1到t10不等,总计消耗时间该为多少?如果没有异步I/O,同步方式将会花费很多时间,而理想状况下的异步调用则为max(t1,...,t10)。 异步令人不满的地方在于流程控制会带来麻烦。但以日常生活为例,生活中处处是异步:排队到窗口买饭是同步,坐在桌子上点菜则是异步;网购是异步,自己跑去超 市买东西拎回家则是同步。我们可以发现生活中的异步并未给我们带来多大烦恼,相反,同步的痛楚可能更明显。但在代码中,却又是相反的。不过好在问题总是可 解的:将逻辑分发,或者采用赵劼开发的Wind.js都是可选方案。
拥抱开源与生态圈成型 随 着Node.js带来服务端JavaScript的进步,如今JavaScript的生态圈已经形成。这里有个有趣的现象,CommonJS立下的志愿最 初没有被实现,但随着Node.js采用CommonJS的部分规范,Node.js具备了理论上的指导。模块、包规范的应用,使得Node.js不像最 初浏览器中的JavaScript一样无序混乱。Node.js在应用过程中催生了NPM工具,而NPM工具的广泛应用则起到了推广CommonJS规范 的效果。这是一个种因得果的循环,有理想,则最终有其实现。 另一件类似的现象体现在V8与Node.js的关系上,Node.js因为V8的优异性能,选择以它作为基础构建平台,但随着Node.js不同于浏览器的应用场景,又反过来促进V8的性能提升。 Node.js 自身开源,同时也推动开源,NPM上的模块数量如今已超过14000,日下载量接近50万次,社区的活跃程度史无前例。尽管我们知道Node.js继承了 一些JavaScript带来的缺点,但在如此强大的社区面前,在一个解决方案比问题还多的社区面前,想没有信心都难。 作为一家企业,我们在淘宝内部也搭建了NPM的镜像服务器,充分利用NPM来管理内部私有模块,减少拷贝粘贴行为,将一切可以模块化的功能或方案尽皆做成包,共享给兄弟项目或者发布到官方NPM上,回馈给开源社区。 如 果一个开源社区的循环是良性的,我们没有理由不信任它,因为成型生态圈,使它具有持久的生命力。但有一件事必须明了,尽管这个生态圈已然成型,但 Node.js自身与现有技术并不是非此即彼的,发挥异步并行的优势,与其他系统异构共存,将会是很长一段时间内的主题。即便是理念最为相近的 Nginx,也是可以与Node.js互相协助的。 总结 也许是早产注定了JavaScript留给开发者发挥的余地够多,尽管不是有意缺少,但确实体现出了Less is More的精髓。按赵劼的话说,尽管JavaScript有很多毛病,但它设计得还不赖。相信后续的ECMAScript标准化能够修缮过去的问题。在经 历了多年的发展以后,JavaScript已不是从前的它,从核心上衍生出的红利也是显而易见的,生态圈及前后端语言打通,使得更多开发者可以参与其中。 随着Node.js在服务端大展拳脚,第二波JavaScript浪潮已经到来,如果依旧怀抱过去的观点,等着被恭喜Out吧。 作者田永强,花名朴灵,2011年在上海组织CNode社区的线下分享会。2012年加入淘宝的数据产品团队专职参与Node.js开发。
- Node.js的出现是让前端工程师羞辱后端吗?
- Node.js肯定是几个前端工程师在实验室里捣鼓出来的。
- 为了后端而后端,有意思吗?
- 异步是反人类的。
- 怎么又发明了一门新语言?
- JavaScript承担的责任太重了。
- 直觉上JavaScript不应该运行在后端。
- 引入了Scheme的函数式,函数成为一等公民。函数式编程里的高阶函数、偏函数都充满了灵活性,它们在JavaScript中得以发挥。
- 引入了Self的原型链。得要感谢Brendan Eich的这个决定,不然现在大多数人可能只知道Java的模版继承,却不知道另一种继承方式叫做“原型链继承”。

- JavaScript引擎性能继续大幅提升;
- 趋向应用化,出现大规模编程的需求。

更多推荐
所有评论(0)