什么时候线程框架比事件驱动框架更好? (即什么时候rails比node.js好?)

时间:2012-05-22 20:47:42

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

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

  • 事件驱动框架的缺点是什么?
  • 我应该何时更喜欢Rails到Node.js?
  • 为什么不是所有使用EventMachine,Twisted或Node.js编写的新Web服务器?
  • Django或Rails等着名的框架会成为事件驱动还是死亡?

1 个答案:

答案 0 :(得分:13)

  

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

  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
    • 事件驱动编程仅适用于需要高并发性的应用程序:这里的原因是事件驱动编程比传统的Web应用程序编程“更难”,所以除非你拥有它,否则它不值得做一个很好的理由。我个人并不认为这是案例事件驱动的编程并不困难,但它非常不同。在某些时候,一大批程序员将熟悉事件驱动的方法,这种担忧将会消失。
    • 事件驱动的编程是一堆嵌套的回调。当你第一次学习它时可能会这样,但最终你会发现如何以可读的方式构建你的代码。
  5. 文档。 Node及其第三方库的文档非常糟糕,通常只包含README.md。来自Python世界,我们习惯于优秀的文档,这是一个很大的缺点。这种情况正在逐渐好转(我们需要更多文档like this)。
  6.   

    我应该何时更喜欢Rails到Node.js?

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

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

    见上文。

      

    Django或Rails这个着名的框架会变成事件驱动还是会死?

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

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