node.js和Tornado之间的差异

cof*_*der 77 javascript python comparison tornado node.js

除了node.js是用JS和Tornado用Python编写的,这两者之间有什么区别?它们都是非阻塞的异步Web服务器,对吧?除了语言之外,为什么选择其中一个?

Mik*_*bov 96

node.js的主要优点是它的所有库都是异步的,所以你不必担心阻塞.有mysql,postgres,redis等的异步库.默认情况下,所有都是异步的.

Python有一个适用于任何东西的库 - 但是大多数这些库都不是异步的.为了利用龙卷风(而不是阻止这个过程),必须使用特殊的库(例如,你不能只是'pip install redis'并使用它,你需要像brukva这样的东西),而且要少得多龙卷风库比node.js库.例如,目前没有可用的异步mysql龙卷风驱动程序(或者至少我不知道它).

但是你仍然可以使用龙卷风的许多python库(那些不做i/o的龙卷风),龙卷风社区正在筹集并填补空白.

根据我的经验,使用node.js编写应用程序比使用龙卷风更容易.我个人从node.js切换到龙卷风,因为它更适合我的python项目的现有基础设施(服务html页面的django站点和提供实时功能的龙卷风服务器之间的集成非常轻松).

  • 应该注意的是,龙卷风现在可以访问来自twisted的所有异步库(参见http://www.tornadoweb.org/documentation/twisted.html).然而,最初的问题明确建议不要考虑语言,重要的是Python有生成器并且它们使编写异步代码变得更容易:javascript中没有这样的东西.有许多库试图解决V8中缺少产量的问题(步骤等),但没有语言支持,它们没有那么漂亮的语法,处理的边缘情况比python的'yield'少. (24认同)
  • 语言node.js在非Javascript 1.7或1.8中使用,它更接近ECMAScript5.这是因为node.js使用的V8引擎并未实现所有JavaScript 1.7功能(请参阅http://code.google.com/p/v8/issues/detail?id=890).这可能在将来发生变化,可能有正当理由(例如JS 1.7不是标准),但是JavaScript 1.7是在2006年引入的,而'yield'在2012年不是第8版. (8认同)
  • 这个答案在2年后更新了吗? (4认同)
  • 你是对的,我以某种方式解释你的评论,好像你说JavaScript没有生成器.我的错. (3认同)

Mor*_*sen 13

正如Rich Bradshaw所指出的,Node.js是用JS编写的,这意味着你可以将前端和后端保持为相同的语言,并可能共享一些代码库.对我来说这是Node.js的巨大潜在好处.Node似乎也提供了更多的异步库.

V8应该使JS比Python更快,至少这是基准测试所表明的,但它可能并不重要,因为Node.jsTornado(以及大多数其他Web框架)都使用本机库的包装器.很多Python标准库都是用C语言编写的,或者可以用更快的替代方案替代,这样可以进一步减少潜在的差异.

Web服务通常受I/O限制,因此这意味着我们花时间等待数据存储而不处理数据.这使得JS和Python之间的合成速度差异在许多应用程序中无关紧要.

  • 非常正确的观点 (2认同)

Ric*_*haw 10

node.js使用V8编译成汇编代码,龙卷风还没有这样做.

除此之外(实际上似乎并没有对速度产生太大影响),它就是生态系统.您更喜欢JS的事件模型,还是Python的工作方式?你是否更喜欢使用Python或JS库?

  • 我只是对简单的单进程helloworld应用程序运行httperf.PyPy 1.8上的龙卷风(~8k req/s)与Node的性能(~11k req/s)相差不远. (6认同)
  • 看看Pypy (5认同)
  • V8编译为机器代码,而不是汇编.并且重要的是编译是即时的而不是静态的:https://en.wikipedia.org/wiki/V8_(JavaScript_engine) (2认同)