【问题标题】:When are threaded frameworks better than event-driven frameworks? (i.e., when is rails better than node.js?)什么时候线程框架比事件驱动框架更好? (即,什么时候 rails 比 node.js 更好?)
【发布时间】:2012-05-29 09:51:32
【问题描述】:

我了解什么是线程框架(Rails、Django、Symfony2,...)。而且我了解什么是事件驱动框架(Node.js、EventMachine、Twisted ……)以及为什么它对实时、聊天、速度等非常有用……此外,它们似乎不会对正常用例造成问题。所以:

  • 事件驱动框架的缺点是什么?
  • 什么时候我应该更喜欢 Rails 而不是 Node.js?
  • 为什么不是所有新的 Web 服务器都使用 EventMachine、Twisted 或 Node.js 编写?
  • 著名的框架(如 Django 或 Rails)会变成事件驱动还是会消亡?

【问题讨论】:

  • 啊,那么在这种情况下,我们需要管理员清理陈旧的 cmets。

标签: ruby-on-rails django node.js frameworks event-driven


【解决方案1】:

那么事件驱动框架的缺点在哪里?

  1. 熟悉。因为事件驱动的网络编程是如此不同,程序员需要一段时间才能适应它。当您在截止日期前工作时,更容易使用您所知道的、行之有效的方法。
  2. 库支持。Node 拥有数量惊人的模块,但要赶上 Ruby 和 Python,还有很长的路要走更新:Node now has more published modules available than Python or Ruby
  3. 部署。 IT 人员习惯于线程化框架。要利用事件驱动的框架,您需要自上而下地异步。现在您可以使用 Node.js 进行开发,但您是否能够有效地部署它,还是必须管理自己的服务器?
  4. 毫无根据的担忧。 看似问题但实际上并非如此的事情:
    • 事件驱动编程不适合 CPU 密集型应用程序:原因是 CPU 密集型计算会阻塞服务器。确实如此,但实际上,可以通过生成另一个进程并将其视为 I/O 来克服它,例如,使用 Node 的 child_process.exec
    • 事件驱动编程只适用于需要高并发的应用:这里的原因是事件驱动编程比传统的网络应用编程“更难”,所以除非你有充分的理由,否则不值得去做到。我个人认为情况并非如此——事件驱动编程不再困难,但它非常不同。在某个时候,大量程序员会熟悉事件驱动的方法,而这种担忧就会消失。
    • 事件驱动编程是一堆嵌套回调。当您第一次学习它时可能是这样,但最终您会发现如何以可读的方式构建代码。
  5. 文档。 Node 及其第 3 方库的文档很糟糕,通常只包含 README.md。来自 Python 世界,我们习惯了优秀的文档,这是一个很大的缺点。这正在慢慢变得更好(我们需要更多文档like this)。

我什么时候应该更喜欢 Rails 而不是 Node.js?

  • 当您或您的团队更喜欢 Ruby 而不是 JavaScript 时。
  • 当您或您的团队不熟悉 Node 并且您需要完成工作时。
  • 当您需要使用 Rails 中 Node 尚不具备的功能时。
  • 当您需要部署到现有的基于 Rails 的基础架构时。
  • 当您必须说服管理层应该使用 Node.js,但又不想在项目失败时成为失败者。

为什么所有新的 Web 服务器都不是用 EventMachine、Twisted 或 Node.js 编写的?

见上文。

著名的 Django 或 Rails 框架会转向事件驱动还是消亡?

Django 和 Rails 将存在很长时间。这些框架中有很多应用程序,没有理由重写它们。并且有一个庞大的人才库,这通常是开发新网络应用程序时的考虑因素。

(但请参阅 Django 的主要开发人员 this Quora answer,支持 Node)。

【讨论】:

  • 作为一名 Rails 开发人员,我想补充一点,在许多情况下,npm 包目前比 ruby​​ gem 更好,并且有上升趋势。
  • 对quora链接的一个想法:节点还有一个关键特性,这甚至是一个不公平的优势。 “一种语言来统治所有人”。一旦你熟悉了 node.js 和 js 本身,你就可以:编写前端/客户端应用程序、服务器端代码、移动应用程序(例如使用 phonegap)、桌面应用程序(例如使用 node-webkit)、查询您的数据库(mongoDBs 查询语言 is javascript),并享受 Web 服务和 JSON 的乐趣,因为当您从上到下使用 JS 时,这几乎是不费吹灰之力。
  • 这是一个很好的答案。它应该在所有线程中得到回应:)
猜你喜欢
  • 2011-09-27
  • 1970-01-01
  • 2016-12-10
  • 2012-07-24
  • 1970-01-01
  • 2011-05-12
  • 2010-12-08
  • 2011-05-30
  • 2012-02-08
相关资源
最近更新 更多