Python+Tornado与Scala+Lift的比较?
我想开始做一个基于谷歌地图的网页应用。最开始我想,第一阶段应该主要关注前端,后端要尽量简单易写,方便快速搭建,同时要尽可能支持前端的开发。
这个应用不会有“经典”的网页,只会有像meebo.com那样的界面。会用到javascript和jquery。(也就是说,几乎没有静态页面,或者根本没有。)
我对那种“彗星式”的服务器推送方式很感兴趣,想尝试做一些概念验证。
你有什么推荐吗?或者在使用以下技术时,有什么优缺点或者经验分享:
Python + Tornado 和 Scala + Lift?
选择其他技术可能会带来哪些优缺点呢?
注意:这个项目最多只有2个开发者,不是一个大团队。
谢谢!
3 个回答
我建议你选择Python,原因如下:
1. 调试方便
我觉得写Python代码时,调试特别简单(可以看看pdb模块),你只需要一个命令行和一个文本编辑器就能设置你的断点。相比之下,使用Scala时,你可能需要依赖一个集成开发环境(IDE)来进行调试。
2. 学习简单
关于编程语言,我不知道你对这两种语言的了解程度。如果你对Python和Scala都是新手,我个人认为你会更快学会Python。
Scala是一种相对干净的编程语言,它让你可以根据需要使用面向对象和函数式编程的方式。
Python则有很多语法上的“糖衣”,它遵循“只有一种方法可以做到”的理念。
通常,Scala会和像Eclipse或Idea这样的开发工具一起使用,虽然也支持vim/emacs,但大多数人还是用前者。而且,Scala是用SBT这个工具构建的。如果你不习惯这些工具,第一次设置可能会有点麻烦。
相比之下,Python常常和一些更轻量级的编辑器一起使用,重新运行更新后的Python脚本也更简单。
Lift主要是为了开发网页应用,它能让网页像桌面应用一样快速响应。如果你只是想做一个主页,其实还有其他框架可以选择,这些框架学习起来不会像Lift那么复杂。
我觉得Python和Tornado真的是一对很棒的组合,原因有以下几点:
- Tornado其实就是一个IOLoop,它自带了一个HTTP的实现(还有一些辅助工具)。
这意味着你可以用它来做网页开发,所需的一切都已经包含在里面。
这也意味着,如果你后来发现需要其他后端服务来帮助你的应用扩展,Tornado在这方面也很有用。我自己用Tornado写的后端服务比前端的多(不过我有个同事正好相反,他更偏向前端,觉得用起来也很不错)。稍微偏题一下,我们还在Tornado之外成功使用了它的模板模块。它的代码非常模块化,几乎没有相互依赖,所以重复使用它的组件非常简单。
- 你可以很快学会它,并且掌握得很好。
你只需要一天就能搞明白。它的代码很干净,注释也写得非常好,还有不错的文档。我在2009年用Tornado 0.2写了一个生产服务,花了大约一周的时间,之前从没接触过。Tornado的源代码非常直白,没有复杂的魔法。
- 它在高负载下也很快且稳定。
我不知道它是否是世界上最快的东西,但在我用它的项目中,它能承受很大的负载,无论是同时在线的用户数量,还是数据传输(比如高容量的图片上传),它都表现得非常稳定,完全没有问题。而且速度也足够快,我根本不用考虑横向扩展或升级硬件。
- Python非常灵活,适应性强。
我经常用Python进行网页开发,使用Tornado(有时也用Django)。不过,我还用它做一些与网页服务完全无关的事情,比如系统管理/自动化任务、报告和数据处理(例如,我用Python写Hadoop作业),还有其他很多事情,标准库模块(比如os、sys、shutil、itertools、collections等)让这些事情变得非常快速。我几乎可以在任何环境下用Python做任何事情,无论输出是通过流、浏览器、图形界面还是控制台。
而且,Python周围有一个非常棒的社区,里面有很多聪明又友好的人。我不能把它和Scala社区比较,但和很多其他社区相比,Python绝对是我最喜欢的,这也是我为什么对它如此依赖的原因。我会多种编程语言,但如果我有问题,最想问的还是Python社区的朋友们 :)