除了node.js用JS和Tornado用Python编写的事实之外,两者之间还有什么区别?它们都是非阻塞异步Web服务器,对吗?为什么要在语言之外选择一个?
Answers:
node.js的主要优点是它的所有库都是异步的,因此您不必担心阻塞。有用于mysql,postgres,redis等的异步库。默认情况下,所有库都是异步的。
Python拥有任何东西的库-但是这些库大多数不是异步的。为了利用龙卷风(而不是阻止进程)的优势,有必要使用特殊的库(例如,您不能仅'pip install redis'并使用它,您将需要brukva之类的东西),而且要少得多龙卷风库比node.js库。例如,目前没有异步mysql龙卷风驱动程序可用(或者至少我不知道)。
但是,您仍然可以将许多python库与龙卷风一起使用(那些不执行I / O的库),并且龙卷风社区正在提高并填补空白。
根据我的经验,使用node.js编写应用程序要比使用龙卷风容易。我个人从node.js切换到龙卷风,因为它更好地适合了我的python项目的现有基础架构(提供html页面的Django站点与提供实时功能的龙卷风服务器之间的集成非常轻松)。
正如Rich Bradshaw指出的那样,Node.js是用JS编写的,这意味着您可以使前端和后端保持相同的语言,并可能共享一些代码库。对我来说,这是Node.js的巨大潜在利益。Node似乎还提供了更多的异步库。
V8应该使JS比Python更快,至少这是基准似乎表明的,但这并不重要,因为Node.js和Tornado(以及与此相关的大多数其他Web框架)都使用本机库的包装器。许多Python标准库都是用C编写的,或者可以用更快的替代方法代替,这可以进一步缓解潜在的差异。
Web服务通常受I / O约束,因此这意味着我们要花时间等待数据存储而不处理数据。这使得JS和Python之间的综合速度差异在许多应用程序中无关紧要。
node.js使用V8编译成汇编代码,而龙卷风还没有这样做。
除此之外(实际上似乎对速度没有太大影响),它是生态系统。您喜欢JS的事件模型还是Python的工作方式?您是否更喜欢使用Python或JS库?
Nodejs还具有Websockets的无缝集成/实现,称为Socket.io。它处理支持套接字(事件)的浏览器,并且对较旧的浏览器具有向后轮询兼容性。它在需要通知框架或一些类似的基于事件的编程的开发中非常快。
如果没有python的个人偏好,我建议您使用NodeJS。我非常喜欢Python,但对于异步,我在节点上选择了Tornado,后来不得不努力寻找一种做事的方法,或者需要异步支持的库(例如Cassandra在测试中具有异步功能,但是我找不到在任何地方使用cqlengine的方法)异步。因为我已经超过了截止日期,所以不得不选择Mongo。在性能和异步方面,Node比龙卷风要好得多。