【问题标题】:Clarifications about Rails and Node.js关于 Rails 和 Node.js 的说明
【发布时间】:2012-03-24 01:17:00
【问题描述】:

到目前为止,我一直在使用 PHP,无论是否有框架,但一个月前我决定开始一些新的东西:Ruby 和 Rails,我发现它们非常简单,并且在工作方式上类似于 PHP 和一些 PHP 框架,但是使用更简单的语法和许多其他优点。

几天前我开始阅读有关 Node.js、Node.js 与 Rails 的文章,“为什么 node.js 更好”...

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

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

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

谢谢!

【问题讨论】:

  • Ruby/Rails 和 Node 都不会在几个月内过时。放松。
  • ...好的,但是实时功能呢?
  • 您能edit 专注于一个问题吗?可能删除第三个(可能是独立的)并结合其他两个?您在这里是一个很好的主观问题的范围,但范围太广了。
  • 已编辑,关于实时和 websockets 的问题我会等待一段时间!

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


【解决方案1】:

两件事 - 性能和生产力。

性能(更多详情here


(来源:jslang.info

生产力(您可以多快构建该应用程序)

Ruby on Rails 是用于创建所谓的 Web 1.0 和 Web 2.0 应用程序(99% 的互联网站点都是此类应用程序)的专用且高效的工具。根据我在这方面的主观判断和经验,Rails 的效率大约是 node.js 或 express.js 的 2-4 倍

对于 Web 3.0 应用程序(实时事物、客户端 MVC 等),这是不正确的,RoR 并没有保持其优势。

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

【讨论】:

  • 我不明白为什么 NodeJS 和 Rails 之间的客户端 MVC 不同。两者都只提供一个 REST API。
  • 有一个误解 - 我说它仅适用于 Web 1 和 2 站点。对于 ClientSideMVC (Web 3) 没有区别。
  • 图片已过时。通过原始帖子作者进行的修复,它们在性能方面非常接近。
【解决方案2】:

Node.js 和 Rails 之间没有足够的差异,因此实际上并不重要。

Node.js 可以做的很多事情都可以通过诸如 EventMachine 和 Pusher 之类的东西在 Rails 中实现。因此,除非您真正熟悉 Rails 的局限性,并且知道自己会突破界限,否则很难做出经验丰富的 Rails 开发人员无法做到的事情。

在 Node 和 Express 中构建了应用程序后,我可以说仅靠它们不足以制作一个性感的应用程序。如果您没有出色的前端 UI 来促进后端的可能性,它们可能看起来同样陈旧过时。与其比较后端服务器,我认为真正的未来是在前端 JavaScript 框架中,如 Backbone.js,在后端使用 Express/Rails/Node.js。

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

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

擅长使用 JavaScript 前端 MVC 和 Rails 作为后端,让你在找工作方面也能胜任这两个世界。您将能够轻松地加入 Node.js 项目并凭借卓越的前端体验为该团队增加价值,您还可以在 Ruby on Rails 团队中取得成功并为他们增加价值。

【讨论】:

  • 为什么你认为像 Backbone.js 这样的 JS MVC 是未来?它们有什么优势?
  • 前端 JS 就是一切。它允许您快速构建可以持续更新网页的小片段的性感界面。它还可以毫不费力地查询您的 Rails API 服务器并准确地抓取它需要的数据对象,而且它是异步完成的。仅在 Node 或 Express 中构建只会为您提供一个正常的网站。它在后端是异步的,但如果你不能看到它在你眼前发生,那也没关系。
  • 前端 JS 的另一个好处是您可以在客户端上发布和存储整个应用程序。您的整个应用程序会在第一次请求时加载,并且无需再次查询额外的 Javascript 或 CSS。这还允许您将其打包并在 Android 和 iOS 设备上轻松发货。
  • 哦,还有一件事,您可以从后端服务器中解放出来。你可以用 PHP 构建你的后端,如果你不喜欢它的工作方式,你可以在你的应用程序不知道或不关心的情况下折腾它并使用 Rails。如果你不喜欢 Rails 的工作方式,那就折腾它并使用 Node.js——将来如果 SuperNode 出现,你可以折腾 Node 并使用 SuperNode,或者只使用 HTML5 离线存储——这一切都适用于你的应用程序开箱即用。
  • 使用 JavaScript MVC,你的所有 JS 都被组织起来,你的视图也被组织起来。您可以将数据字段映射到视图的不同部分并说“观察这些字段” - 如果这些字段曾经更改,视图会自动更新。您可以获得帮助您查询数据并轻松排序的功能。您不必操作 DOM,只需将字段映射到 DOM 并说“渲染此视图”,它就知道要做什么。您还可以定义自己的路由,因此整个应用程序永远不会加载新页面。它使您的整个网站成为一个性感的实时“应用程序”变得非常容易。
【解决方案3】:

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

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

  1. “Rails 方式” - 在我(诚然有限的)Rails 经验中,看起来你要么按照 Rails 方式去做,要么将陷入痛苦的世界。 Rails 方式的很大一部分是使用 ActiveRecord 模型。这样做的好处是有很多 gem 可以愉快地使用您的代码,因为它们知道您将使用 ActiveRecord。缺点是您正在混合数据访问和模型。我不喜欢这个想法,所以 Rails 的方式对我来说仍然有点……不妥。

  2. JavaScript 是客户端 Web 开发的关键部分,在客户端和服务器上使用它的想法很有趣。我在 JavaScript 方面不是特别强,我想不出比必须在任何地方都使用它更好的方法。

  3. 我的项目有实时通信需求,虽然我确信可以在 Rails 中完成,但似乎有相当多的积极提及 Nodes 处理此问题的能力,其中 socket.io 是领先者选项。

在一天结束时,无论您选择哪种方式,您都会度过一段美好的时光并学习大量新知识,这些知识将改变您编写代码的方式。如果您不是很忙,我建议您在两者中都构建一个小型项目管理工具,然后看看您喜欢哪个。

不管怎样……祝你好运!

【讨论】:

  • 我对第 3 点非常感兴趣,我认为实时可能是我将要构建的关键点,并且我读过 Node.js 似乎是最好的选择为它....
【解决方案4】:

正如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 调用。 Node 只是在执行输入脚本后进入事件循环。当没有更多回调要执行时,节点退出事件循环。这种行为类似于浏览器 javascript——事件循环对用户隐藏。

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

【讨论】:

    【解决方案5】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-18
      • 2016-03-24
      • 1970-01-01
      • 2019-08-29
      • 2019-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多