关于Rails和Node.js的澄清

时间:2012-03-06 14:38:55

标签: ruby-on-rails ruby node.js

到目前为止,我总是在有或没有框架的情况下使用PHP,但一个月前我决定开始一些新的东西:Ruby和Rails,我发现它们非常简单,类似于PHP和一些PHP框架,但它们的工作原理如何使用更简单的语法和许多其他优点。

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

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

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

使用基于它的Node.js和框架而不是像Rails这样的基于Ruby的解决方案有哪些主要优点/缺点?

谢谢!

5 个答案:

答案 0 :(得分:35)

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

Node.js可以使用EventMachine和Pusher之类的东西,在Rails中拉出。所以除非你真的熟悉Rails'限制,并且知道你要突破界限,你很难做出经验丰富的Rails开发人员无法做到的事情。

在Node和Express中构建应用程序我可以说仅凭它们不足以制作性感的应用程序。如果您没有一个出色的前端UI来促进后端可能性,它们看起来就像旧的和陈旧的一样。而不是比较后端服务器,我认为做出惊人事情的真正未来是在Backbone.js之类的前端JavaScript框架中,它们在后端使用Express / Rails / Node.js。

我选择使用Rails作为我的后端API服务器朝Backbone.js的方向发展。因为在Rails中快速创建一个非常好的RESTful后端服务器非常容易。 Rails还使用CoffeeScript和预编译/组织Backbone代码变得轻而易举。 Rails已经有了不错的Backbone.js宝石。

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

良好的JavaScript前端MVC和Rails作为后端使你在获得工作方面对两个世界都很有用。您可以轻松地跳转到Node.js项目,并通过您卓越的前端体验为该团队增加价值,您还可以在Ruby on Rails团队中轻松应对并为其增加价值。

答案 1 :(得分:5)

正如official Node.js website解释的那样:

  

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

另一方面,Ruby on Rails official website说:

  

Ruby on Rails是一个开源的Web框架,针对程序员的快乐和可持续的生产力进行了优化。它允许您通过支持约定优于配置来编写漂亮的代码。

鉴于此,我认为比较Ruby和Node.js更合适,但即使这是不正确的,因为Ruby是编程语言而Node.js不是。您可以将JavaScript与Ruby进行比较,但我想这不是您要问的问题:)

因此,对我而言,理解Node.js真正想要实现的目标的关键点在Node.js about page上有详细描述。关键Node.js的想法(对我来说)在这句话中描述:

  

Node的设计类似于Ruby的Event Machine或Python的Twisted等系统。 Node进一步采用事件模型 - 它将事件循环呈现为语言结构而不是库。在其他系统中,始终存在阻塞调用以启动事件循环。通常,在脚本开头通过回调定义行为,最后通过阻塞调用(如EventMachine :: run())启动服务器。在Node中没有这样的start-the-event-loop调用。节点在执行输入脚本后简单地进入事件循环。当没有更多回调要执行时,节点退出事件循环。此行为类似于浏览器javascript - 事件循环对用户隐藏。

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

答案 2 :(得分:4)

你担心Rails或Node.js将在一周内消失是没有根据的。 Rails拥有一个庞大的社区,并且将会存在很长一段时间,尽管目前(2012年初)它会引起一些仇恨。 Node.js刚刚开始并受到如此多的关注,我认为它有一天没有任何问题进入Rails级别。

那说我一直在评估Node.js和Rails作为项目的选项,我选择Node.js而不是Rails的原因是:

  1. “Rails方式” - 在我对Rails的(无可否认有限的)体验中,你似乎要么以Rails的方式去做,要么就是为了一个痛苦的世界。 Rails方法的一个重要部分是使用ActiveRecord模型。这样做的好处是有很多宝石可以愉快地处理你的代码,因为他们知道你将使用ActiveRecord。缺点是你正在混合你的数据访问和模型。我不是这个想法的粉丝,所以对我来说Rails的方式似乎有点......关闭。

  2. JavaScript是客户端Web开发的关键部分,在客户端和服务器上使用它的想法很有趣。我不是非常强大的JavaScript,我无法想象一个更好的方法来变得更好,然后必须在任何地方使用它。

  3. 我的项目有实时通信需求虽然我确信可以在Rails中完成,但似乎有很多积极提及节点处理这个问题的能力,socket.io是前端选项。

  4. 在一天结束时,无论你选择哪一个,你都会度过一个愉快的时光。学习大量新内容,这将改变你编写代码的方式。如果你没有处于紧张状态,我建议在两者中构建一个小型项目管理工具,看看你喜欢哪个。

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

答案 3 :(得分:3)

2件事 - 表演&生产率。

效果(更多详情here

http://jslang.info/blog/2014/ruby-on-rails-vs-nodejs/ror-vs-node.png

效率(您构建该应用的速度有多快)

Ruby on Rails是专门用于创建所谓的Web 1.0和Web 2.0应用程序的高效工具(99%的互联网站点都是此类应用程序)。在我对这个领域的主观判断和经验中,Rails比node.js或express.js 效率提高2-4倍

对于Web 3.0应用程序(实时的东西,客户端的MVC等),这不是真的,RoR并没有在那里保持优势。

所以选择取决于用例和优先级

答案 4 :(得分:2)

我对Node.js的了解远远多于对Ruby的了解。话虽这么说,Ruby被广泛采用。目前在工作场所拥有非常热门的技能。有些人可能会与我争论,但我认为Node.js仍处于“开发阶段”,并且会持续一段时间。它有很多希望但尚未被许多公司和项目采用。