什么时候线程框架比事件驱动的框架更好? (也就是说,什么时候rails比node.js好?)

我明白什么是线程框架(Rails,Django,Symfony2,…)。 我明白事件驱动的框架是什么(Node.js,EventMachine,Twisted,…)以及为什么它对于生活,聊天,速度,…而言是好的。另外,它们似乎不会给正常用例带来问题。 所以:

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

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

  1. 熟悉。 由于事件驱动的networking编程是如此不同,程序员对此感到满意还需要一段时间。 当你在最后期限工作时,使用你所知道的工作会更容易。
  2. 图书馆支持。 Node有很多模块,但要赶上Ruby和Python还有很长的路要走更新: 节点现在有比Python或Ruby更多的已发布模块 。
  3. 部署。 IT人员习惯于线程框架。 要利用事件驱动的框架,您需要从头到尾进行asynchronous操作。 现在你可以在Node.js中进行开发,但是你能够有效地进行部署,还是需要pipe理你自己的服务器?
  4. 毫无疑问的担忧。 看起来像是问题,但不是真的:
    • 事件驱动的编程对CPU密集型应用程序是不利的 :原因是CPU密集型计算会阻塞服务器。 这是完全正确的,但实际上,它是通过产生另一个进程并将其视为I / O来克服的,例如,使用Node的child_process.exec
    • 事件驱动的编程仅适用于需要高并发性的应用程序 :这里的原因是事件驱动编程比传统的Web应用程序编程“更难”,所以除非您有充分的理由,否则不值得去做。 我个人不认为这是事件驱动的编程是没有困难的,但它是非常不同的。 在某种程度上,一大批程序员会熟悉事件驱动的方法,这种担忧将会消失。
    • 事件驱动的编程是一堆嵌套的callback。 当你第一次了解它时,这可能是真实的,但是最终你会发现如何以可读的方式构build你的代码。
  5. 文档。 Node及其第三方库的文档非常糟糕,通常只包含一个README.md 。 来自Python世界,我们习惯于优秀的文档,这是一个很大的缺陷。 这正在慢慢变好(我们需要更多的文档)。

我应该什么时候更喜欢Rails的Node.js?

  • 当你或你的团队只是比Ruby更喜欢Ruby。
  • 当你或你的团队不熟悉Node时,你需要完成工作。
  • 当你需要使用Rails中的function时,节点还没有。
  • 当你需要部署到现有的基于Rails的基础架构。
  • 当你必须说服pipe理人员你应该使用Node.js的时候,但是如果项目失败了,你不想成为一个倒下的人。

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

往上看。

像Django或Rails这样着名的框架是否将事件驱动或死亡?

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

(但请参阅Django首席开发人员的Quora答复 ,表示赞同Node)。