与Ruby 相比,NodeJS 有哪些优势

Python030

与Ruby 相比,NodeJS 有哪些优势,第1张

Google JS Runtime 非常快

nodejs 默认 async(异步),有些时候快一些

适合 one page app (比如gmail那样的)我觉得的是更适合ajax所以才这样

语言统一,不用前后台换来换去,都是javascript(有人不喜欢javascript,可以学 coffee script),同时和mongodb结合比较好(相比SQL)。现在有一个MEAN stack: mongodb, express, angular and nodejs,貌似学好了很厉害。

Ruby on Rails优势

成熟,gem很好很多很全(不过nodejs现在用的人越来越多了)

会的人比较多(至少再美国)

学起来相对比nodejs要容易。nodejs的 abstraction(抽象?)比RoR少,还涉及到 callbacks(因为是异步)

移动端可能要求ajax多一些(如果你不做 native app),这个主要是前台设计(个人认为)。如果是点评网站的话,我觉得可能 Ruby on Rails 还是更合适一些。

我最近也在做后端,Python,Ruby,Node 都用了一下,最后选择 NodeJS。

在选择时,Ruby on Rails,Django 第一个出局,因为考虑到 API 应该轻,快。

Python 曾经用过 Flask,考虑过 Bottle。不过两者的 Extensions 的功能都无法需求。

Ruby 的 Sinatra 是最好用的。选择 Sinatra + Mongoid,一个星期可以搞出来(我自己的情况)。

现在选择用 NodeJS 的 ExpressJS + Mongoose 搭配。从 Ruby 转成 Node,主要是因为看上 NodeJS 的性能。Request per Second 的话,NodeJS 7000 左右,ExpressJS 3000 左右,Sinatra 900 左右,Ruby on Rails 300 左右。

我写 JavaScript 都是用 CoffeeScript 写的,所以写起来就像写 Ruby 或 Python 一样,非常 Lisp。

ExpressJS 的开发也是这些框架里面,最活跃的。

我用 Node.js 开发了 Am I Hacked,算是有一点用 Node.js 支持大流量的经验。先列一些数字

服务器是 Linode 512,也就是 Linode 上最低端的 VPS ,只有 512MB 的内存。

数据库,Node.js 程序和静态文件都放在同一台服务器上。

大部分查询耗时 20-100ms 。少数查询由于缓存 miss 较多,耗时会高达500ms。

最高日PV超过了一百万,Google Analytic 上显示的同时在线人数最高达2000。

平均每秒能完成20-30次查询,瓶颈在磁盘IO,CPU几乎无压力。

虽然压力如此之大,首页几乎都能在一秒内打开,查询也会在3秒内返回。

Node.js 程序占用内存 90MB-110MB,剩余内存都被磁盘缓存占据。

以我的了解,Python 和 Ruby 上的非 Event Driven 的 Framework 根本不可能达到这样的性能。

然后说说 Node.js 的其他优点

Node.js 的架构与 Django, Rails 等传统的 Framework 不同,不需要放在 Nginx / Apache 后,利用 WSGI, CGI 之类的接口一板一眼的 [接受Request] ->[运行程序逻辑] ->[生成并返回Response]。这是一个巨大的变化,之前一些无法想象的功能都有可能实现了。比如 https://github.com/Miserlou/DirtyShare 可以用浏览器实现 P2P 的文件传输。正因为 Node.js 可以更精细的控制 Request 和 Response 的时间和内容,websocket 似乎天生就是为 Node.js 而生的,而配合 http://socket.io 这个神奇的库之后,在 realtime webapp 这个领域,Node.js 已经没有对手了。

Node.js 的包管理器 npm 设计得比 python 和 ruby 好很多。有很多的 module 开发者。

当然也有一些缺点

Debug 很困难。没有 stack trace,出了问题很难查找问题的原因。

如果设计不好,很容易让代码充满 callback 。