node.js和Tornado之间的差异

时间:2011-04-06 05:06:40

标签: javascript python comparison node.js tornado

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

5 个答案:

答案 0 :(得分:96)

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

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

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

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

答案 1 :(得分:13)

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

V8应该使JS比Python at least that's what benchmarks seem to suggest更快,但它可能并不重要,因为 Node.js Tornado (以及大多数其他Web框架)就此而言)使用本机库的包装器。很多Python标准库都是用C语言编写的,或者可以用更快的替代方案替代,这样可以进一步减少潜在的差异。

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

答案 2 :(得分:10)

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

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

答案 3 :(得分:3)

Nodejs还具有称为Socket.io的websockets的无缝集成/实现。它处理支持套接字的浏览器 - 事件,并且还具有旧版浏览器的向后轮询兼容性。它的开发速度非常快,需要通知框架或类似的基于事件的编程。

答案 4 :(得分:3)

如果没有python的个人首选,我建议你使用NodeJS。我非常喜欢Python,但是对于异步我选择Tornado而不是节点,后来不得不努力找到做某事的方法,或者有异步支持的库(比如Cassandra在测试中有异步,但我无处可寻找使用cqlengine的方法async。因为我已经超过截止日期所以选择Mongo)。 在性能和异步方面,Node远胜龙卷风。