原文发布于 2006 年 11 月 16 日上午 11 时 35 分。
由于两位 Web 开发人员的努力,现在我们已经有一份对 Ruby on Rails 和 Python 的 Django 框架颇为客观公正的比较测评。Ben Askins 和 Alan Green 共同制定并各自并行开发了一个分享书评的简单 Web 应用。他们的报告以及源代码都已经发布到网上,供大家阅读及下载。从测评结果中,他们得到这样一个结论,两个框架没有哪个明显优于另外一个,因此最佳方案很可能还是坚持使用你所选择的语言写出的框架。但是,仍然存在一些关键指标,使得在二者之间做选择显得不是那么容易。
在这里我们无须介绍 Ruby on Rails ,但对于 Django 还是有必要着笔下墨做下介绍。Django 之所以能在 Python 世界中脱颖而出,主要有两个原因:一是Google 的大力支持,二是 Python 的掌舵人 Guido van Rossum 一反常态,在众多基本差不多的选择中对 Django 情有独钟。此外,Alan 和 Ben 也指出,“Django [……] 并不是 Ruby on Rails 的仿制品”。
在 两位作者实现的Web 应用中代码行的比较方面,Rails 以比 Python 少 4% 行数的成绩而胜出。尽管 Django 中的模板显得更加冗长,但是 Django 提供一个几近自由的管理接口,因而使得实际上他们写出来的 Python 代码比 Ruby 代码还要少。在开发时间方面,Rails 实现用了 25 小时 45 分,而 Django 仅用了 16 小时 36 分钟。当然,我们不能轻易断言到底 是Ben 还是 Alan 代码写得更快,但这还是对在 Rails 上编写管理表单时需要的不同起了一定说明作用,而 Django 则通过模型中的若干提示生成这些代码。作者推荐考察诸如 AutoAdmin 和 Streamlined 等 Rails 插件来进行相应的改进。
报告指出,通过使用 RJS 和集成的 JavaScript 库,Rails 使AJAX 开发变得更加容易,而 Django 包含了 JSON 功能,但将所有的 JavaScript 编码以及对客户端库的选择留给了开发人员。JavaScript 高手们可能会更喜欢 Django 的不干预政策,但除了这些人以外,其它所有人都能从 Rails 内建的 AJAX 支持中受益。
另一方面他们表示,Python 框架为国际化提供了更优秀的基础支持,因为 Python 平台提供与生俱来的 Unicode 支持及 gettext 消息替换功能,使得多语言网站可以针对不同的 HTTP 请求产生本地化响应。
Rails 的主要优势在于其迁移机制,可以使得对数据模型的变更尝试和改进变得容易,甚至对于生产环境的应用程序来说也是如此。Django 在此方面则尚无建树。倘若 Alan 和 Ben 忽略代码中迁移代码的行数,那么 Ruby 和 Python 的代码数量是大致相等的。在加入模板后,Rails 解决方案要比 Django 方案少出 15% 的代码行数,即便在提供了定制的管理页面时也是如此。在这里作者拿苹果和(不存在的)橘子做比较,表现出对 Django 的偏袒。
Green 和 Askin 二位先生颇为简洁地总结到:“尽管在二者之间做出选择可能是件困难的事情,但好消息是任意一个框架都是团队开发 Web 应用的优秀选择。”假如你的应用中有高级的国际化需求,他们的分析报告表明 Django 会是最好的选择。那些不需要国际化特性,但需要现成的 AJAX 功能,期望有大量不同模板以及不想被数据迁移困扰的开发人员,则将从 Ruby on Rails 中受益匪浅。
评论