Python+Tornado vs Scala+Lift?

12
我计划开发一款基于 Google Maps 的网络应用程序。我的初步想法是,在第一阶段重点放在前端,后端应该易于编写和原型设计,并尽可能地帮助前端开发。
这个应用程序不会有传统的页面,而是采用类似于 meebo.com 风格的界面,使用 javascript + jquery,几乎没有静态页面。
我留意到了彗星式的服务器推送范例,并且非常有兴趣做一些概念验证。
你对以下方案有任何建议或优缺点或任何使用经验吗: Python + Tornado vs Scala + Lift
其他领域的选择可能带来哪些优缺点呢?
注意:这是针对最多两名开发人员的项目,并不需要大规模的分布式和变更团队。
谢谢

Lift配备了丰富的JavaScript DSL,非常容易编写Ajax/Comet Web应用程序,在其中您只需要更新页面的某些片段。 (由于我没有使用Tornado的经验,因此只是一条评论)。 - opyate
2
为什么需要Comet服务器推送?对于一个典型的地图应用程序,我想所有的交互都应该从客户端开始,因此AJAX回调足以满足需求,除非有进一步未说明的要求,否则您不需要使用服务器推送。 - Jürgen Strobel
3个回答

14

我认为Python和Tornado是一个伟大的团队,原因如下:

  • Tornado实际上是一个IOLoop,它恰好带有在其上运行的HTTP实现(以及一些助手函数)。

这意味着它已经包含了你需要用它进行Web开发所需的一切。

同时,如果你发现,在未来的路上,你需要其他后端服务来帮助扩展你的应用程序,Tornado很可能在这方面非常有用。事实上,我在Tornado中编写的后端服务比前端服务还要多(但我的同事则有相反的经验--他更注重前端并发现使用它非常方便)。离题有点,但我们还在Tornado之外使用它们的模板模块,并且非常成功。代码非常模块化,几乎没有相互依赖,因此重用其组件非常容易。

  • 你可以非常快速地学会它并精通它。

你只需要一天就能理解它。它的代码干净,注释非常详细,并且还有相当不错的文档。我在从未见过它之前就能够使用Tornado 0.2(约2009年)编写出一个生产服务。Tornado的源代码非常透明。

  • 它快速而且稳定,即使在负载下也是如此。

我不知道它是不是绝对最快的东西,但在我使用它的项目中,它承担了一些非常重的负载,包括并发用户数量和数据传输(例如高容量图像上传),它在稳定性方面完全坚如磐石,并且足够快,我甚至没有考虑横向扩展或获得更大的硬件。

  • Python非常灵活和适应性强。

我经常使用Python进行web开发,使用Tornado进行开发(有时也会使用Django)。但是,我也将其用于与Web服务本身完全无关的事情,例如系统管理员/自动化任务、报告和数据整理(例如,我使用Python编写Hadoop作业)以及其他需要标准库模块(os、sys、shutil、itertools、collections等)快速构建的事情。我可以在几乎任何环境中使用Python,不管输出内容是通过流、浏览器、Fat GUI还是控制台。

此外,Python拥有一个非常出色的社区,由一群聪明友好的人组成。我不能将其与Scala社区进行比较,但与许多其他社区相比,Python很容易成为我的最爱,这也是我如此迷恋它的原因之一。我是多语言用户,但如果我有问题,我最想向Python社区成员提出问题 :)


谢谢,非常有说服力的评论。我很放心,你和你的同事已经成功地使用了它。随着时间的推移,我可能更倾向于Python,尽管我最初考虑过Scala。我仍在等待更多的经验和意见,直到赏金结束,但这绝对是我听过的最好的建议。谢谢 :) - florin.bunau

6

Scala是一种更加简洁的语言,允许您随意使用面向对象和函数式编程范式。

Python则采用了更多的语法糖,并且奉行“只有一种正确的方法”的哲学。

Scala通常与Eclipse/Idea等IDE一起使用,虽然也支持vim/emacs等轻量级编辑器,同时使用SBT构建。如果您不习惯这些工具,第一次设置可能需要一些努力。

Python通常与更轻量级的编辑器一起使用。通过默认方式重新运行更新的Python脚本更加容易。

Lift主要针对Web应用程序,可以实现类似桌面应用程序的响应性和行为。如果您只想创建主页,则肯定有其他框架可供选择,它们不需要您像使用Lift那样学习太多知识。


感谢您的评论。我来自Java桌面和分布式代理领域。我有丰富的Java经验,但之前也写过C#,C,C ++和Python。Scala不会是问题,而且应用程序将比主页更复杂。我想要类似桌面的响应能力和行为。 - florin.bunau

3
我建议选择Python,原因如下:
1. 调试
在编写Python代码时,我发现调试非常有用(请参见pdb模块),您只需要命令提示符和文本编辑器即可设置断点。对于Scala,您可能需要依靠IDE进行所有调试。
2. 易学性
就编程语言而言,我不知道您对这两种语言的经验如何。如果您是Python和Scala的初学者,我个人认为您会更快地学习Python。

我们都知道Python更好,但我在Java堆栈方面有更多的经验。你说得很对,关于调试,我忘记了。在使用两种方法进行PoC评估时,我一定会考虑这一点,谢谢。 - florin.bunau

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接