node.js使用感受 献800题大牛# JobHunting - 待字闺中
p*2
1 楼
稍微用了用node,写一点感受吧。本来想优点,缺点单独列出来,但是感觉还是混起来
写吧。
1. 自己想做点什么东西都不可避免要接触到前端,而前端则是JS的天下,因此前几天
看了看JS。这个时候就产生了一个问题了。既然前端必须要用JS,那么为什么不用node
,从而前后端统一语言呢?我当时的回答是不会用node,因为JS这个语言是挺灵活有趣
的,但是写起来实在是太boring了,前端用是没得其他选择,后端再用可就太痛苦了。
但是很快我发现了coffeescript这门语言,它吸收了python, ruby的优点,又解决了JS
的很多缺陷,因此我眼前一亮,一下子就喜欢上了这门语言了。当时学Ruby的时候就觉
得do end太boring了,要是能吸收Python的indentation代码就好看了,结果现在成为
现实了,就是coffeescript。有了coffeescript之后,我没有什么理由不考虑使用node
了。
优点1: 前后端统一语言。
2. 我在用Play的时候发现了一个问题就是我需要把Scala里的数据手工的转到Json,这
个工作比较boring,而node本身就是JS的,因此object和Json之间的转换特别的方便,
这是我把项目从Play转到node的一个很重要的原因。而node的数据库很典型的是用
mangoDB,从而数据的转换变的非常smooth。
优点2: Json数据方便传递。
3. 我在学JS的时候发现程序只能在browser里运行非常不方便,后来学到node发现可以
在node上直接运行,从而跟python,ruby一样了。JS也不单单只能做web应用,平时写
script也可以。
优点3: 使得JS成为像Python, Ruby一样的脚本语言。
4. Play底下有一个很强大的AKKA,因此我也担心node可能不堪大用,没法实现AKKA可
以实现的应用。后来发现node有cluster module和Socket.IO,完全类似AKKA,可以支
持同样的应用。而且我用AKKA的时候发觉有一个问题就是actor之间的通信是私有协议
,只能处理其他actor的请求,而node的Socket.IO是WebSocket协议,是公开的,因此
可以接受任何的请求。我没有看到过测试数据,但是对于我自己的项目来说,貌似node
完全可以满足需求了。并且貌似Socket.IO这东西,node超前了一步,其他平台还没有
实现?看到这个我才知道原来web上也是可以双向通信的。
优点4: 先进的Socket.IO
5. node采用了异步IO编程模式,这个模式有点意思,因为平时我们写代码大部分都是
同步的,因此需要点思维的转变。现在异步IO越来越流行,因此各个语言都有相应的实
现,但是node不同的是因为JS天生就是异步的,因此写起来最自然。
优点5: 天生的异步编程
6. node上最流行的框架Express.js是学习了Ruby的Sinatra,里边的Jade是学习了HAML
。我做的那个网站正好就是用的Sinatra和HAML,因此感觉很亲切。Sinatra本身就是非
常适合做web service,而现在RIA的发展,backend慢慢变为了就是提供restful web
service。因此,node非常符合现在网络应用的趋势。
以上是我的几点最直接的感受,下面谈谈其他的。
7. node的社区非常活跃。play是2007年开始的,node是2009年开始的。Linkedin上
play只有1364个member, 而node有7094个,可见node的关注和活跃程度。
8. node采用了Google V8 JS engine, 从而达到了C/C++的性能。这点上比Python,
Ruby都强了。
9. node采用了单线程 event-driven 编程模式。从而使得你不用在烦恼线程同步,
race condition, dead lock这些头疼问题了。当然编程模式的变化也需要一定的思维
转换,不过还是挺有意思的。从各方面的反应来看都证明event-driven优于multi
threading,但是我也不敢肯定取消thread就没有副作用吗?可能还是看应用场景吧?
这个还需要时间的检验和思考。我还没想明白如果event-driven这么牛,为什么到了
node才流行开来。
10. 板上大牛介绍的webstorm IDE实在是太好用了。
写吧。
1. 自己想做点什么东西都不可避免要接触到前端,而前端则是JS的天下,因此前几天
看了看JS。这个时候就产生了一个问题了。既然前端必须要用JS,那么为什么不用node
,从而前后端统一语言呢?我当时的回答是不会用node,因为JS这个语言是挺灵活有趣
的,但是写起来实在是太boring了,前端用是没得其他选择,后端再用可就太痛苦了。
但是很快我发现了coffeescript这门语言,它吸收了python, ruby的优点,又解决了JS
的很多缺陷,因此我眼前一亮,一下子就喜欢上了这门语言了。当时学Ruby的时候就觉
得do end太boring了,要是能吸收Python的indentation代码就好看了,结果现在成为
现实了,就是coffeescript。有了coffeescript之后,我没有什么理由不考虑使用node
了。
优点1: 前后端统一语言。
2. 我在用Play的时候发现了一个问题就是我需要把Scala里的数据手工的转到Json,这
个工作比较boring,而node本身就是JS的,因此object和Json之间的转换特别的方便,
这是我把项目从Play转到node的一个很重要的原因。而node的数据库很典型的是用
mangoDB,从而数据的转换变的非常smooth。
优点2: Json数据方便传递。
3. 我在学JS的时候发现程序只能在browser里运行非常不方便,后来学到node发现可以
在node上直接运行,从而跟python,ruby一样了。JS也不单单只能做web应用,平时写
script也可以。
优点3: 使得JS成为像Python, Ruby一样的脚本语言。
4. Play底下有一个很强大的AKKA,因此我也担心node可能不堪大用,没法实现AKKA可
以实现的应用。后来发现node有cluster module和Socket.IO,完全类似AKKA,可以支
持同样的应用。而且我用AKKA的时候发觉有一个问题就是actor之间的通信是私有协议
,只能处理其他actor的请求,而node的Socket.IO是WebSocket协议,是公开的,因此
可以接受任何的请求。我没有看到过测试数据,但是对于我自己的项目来说,貌似node
完全可以满足需求了。并且貌似Socket.IO这东西,node超前了一步,其他平台还没有
实现?看到这个我才知道原来web上也是可以双向通信的。
优点4: 先进的Socket.IO
5. node采用了异步IO编程模式,这个模式有点意思,因为平时我们写代码大部分都是
同步的,因此需要点思维的转变。现在异步IO越来越流行,因此各个语言都有相应的实
现,但是node不同的是因为JS天生就是异步的,因此写起来最自然。
优点5: 天生的异步编程
6. node上最流行的框架Express.js是学习了Ruby的Sinatra,里边的Jade是学习了HAML
。我做的那个网站正好就是用的Sinatra和HAML,因此感觉很亲切。Sinatra本身就是非
常适合做web service,而现在RIA的发展,backend慢慢变为了就是提供restful web
service。因此,node非常符合现在网络应用的趋势。
以上是我的几点最直接的感受,下面谈谈其他的。
7. node的社区非常活跃。play是2007年开始的,node是2009年开始的。Linkedin上
play只有1364个member, 而node有7094个,可见node的关注和活跃程度。
8. node采用了Google V8 JS engine, 从而达到了C/C++的性能。这点上比Python,
Ruby都强了。
9. node采用了单线程 event-driven 编程模式。从而使得你不用在烦恼线程同步,
race condition, dead lock这些头疼问题了。当然编程模式的变化也需要一定的思维
转换,不过还是挺有意思的。从各方面的反应来看都证明event-driven优于multi
threading,但是我也不敢肯定取消thread就没有副作用吗?可能还是看应用场景吧?
这个还需要时间的检验和思考。我还没想明白如果event-driven这么牛,为什么到了
node才流行开来。
10. 板上大牛介绍的webstorm IDE实在是太好用了。