准备研究node.js

node.js—使用javascript开发后台程序,这东西一直对它都有误解,我一路都以为它是给前端的朋友玩玩后台的玩具。

直到早几天看到一个报道《LinkedIn从Rails迁移到Node:服务器减少27台,速度提升了20倍》(注:由30台减少到3台),才开始去认真了解node.js这个新玩意。发觉这个玩具非常强大。

对node.js的误解可能是由于一些对这个node.js的介绍都是介绍它是一个使用javascript的开发后台的解析器。其实node.js是一个基于事件驱动开发的服务器组件,,javascript只不过是这个组件的粘合剂。node.js是一种开发模式,是一种编程思想。其实它不一定选择javascript作为开发语言,可以选择lua,或者一种全新的语言。据说作者初期做的时候选择过使用lua的,不过速度不是很理想。选择javascript主要是因为google的javascript V8引擎速度超快,再加上javascript的闭包特性比较适合这种事件驱动开发模式和面向过程的语言。

现在讲讲我为什么对node.js有一种强烈的愿望去研究它。

1、node.js开发的产品吞吐量大,符合现在一些高并发的需求。而且比较方便扩展到分布式的应用。

2、我比较喜欢这种事件驱动模型的编程方式,以前搞tcp通信程序的时候我都是选择这种事件驱动方式去处理。虽然这种异步编程的复杂度比同步编程方式复杂些,但是这种复杂度比起多线程同步的处理还是方便很多。出错机会小很多,特别死锁这些情况很难在开发的时候发现的问题。

3、虽然我个人很喜欢c语言,但是使用c语言开发成本实在太贵了。加上有时候开发一些应用服务使用c语言也不合适。我觉得c比较适合在底层通信和网络通信部分用c是一个好选择,其它开发还是别用c比较好。node.js就是使用c来开发最底层的东西,例如:tcp通信通信。其余用脚本来处理。这样可以大大降低开发成本,需要速度快的地方可以用c/c++来来处理。既有开发速度又有运行速度。

4、我希望在我一个项目中编写一个爬虫服务。使用node.js可以方便地嵌入jquery。jquery的选择器对于爬虫服务抽取数据非常方便。不过目前发现node.js的html分析器都是直接用javascript编写的。可能性能不是特别好。希望可以把webkit的dom解析器嵌入node.js就强了,还可以适应一些不太标准的网页,例如一些闭合标签不完整的网页。

5、研究node.js的源码,希望将来可以参照它,把V8 javascript引擎引入在IOS开发中,提高一些ios程序的灵活性。虽然现在一些游戏框架使用lua来实现。不过我感觉用javascript实现会比Lua好。

6、还有一点,node.js比较简洁,轻量级结构。核心只包含最基本的库。其他通过插件扩充。这样学习成本比较底,同时拥有超强的扩充能力。

这里提一提Erlang,这个语言同样是一个面向高并发,和面向过程的语言。去年这个时候也花费了一些时间学习了。不过现在已经忘记七七八八了,只是记得它的编程思想,方式,方法。语法那些都忘记了。加上Erlang这个语言加上OTP的组件过于庞大。需要化好多时间才可以深入。不过它比起node.js的确强很多。但是node.js简单得多了。非常符合make it sample的原则。