Choosing Rails vs. Django based on performance and scalability
我目前正在做一个侧边项目(希望它能发展成更多的东西),现在它的前端是严格静态的:HTML、CSS和jquery。所以在这期间,我有时间对RubyonRails和python/django的选择做大量的研究。
我读过无数篇比较这两种语言的文章,通常归结为"你喜欢哪种语言?"以及发展共同体的考虑。
我这里的问题完全是技术性的,将框架(及其各自的语言)作如下比较:
Ruby/Rails与python/django之间:
哪个运行时性能更好(任何统计数据或实际示例都很好)?
什么是已知的可伸缩性问题,以及从长远来看哪个扩展性更好(同样,表示这一点的任何技术文档或数据都很好)?
我知道可伸缩性取决于体系结构,所以问题是什么框架及其各自的工具、API、插件、社区、文档等。"指南"从"开始"到"最佳可伸缩Web体系结构"?
谢谢!
- 这个问题没有答案,就像"哪个更好"问题没有答案一样。两者都可以在虚拟机上运行,在需要时可以立即升级。然而,Rails可以部署在Heroku上,Heroku考虑到了可伸缩性的数学问题,这与您可能喜欢的有点不同。对于姜戈,也有许多类似的解决方案,但总的来说,它们似乎没有那么好。在某些方面和某些情况下,Rails现在可能会赢得这场比赛。
- 顺便说一下,上面关于Heroku上只部署了Rails的评论现在是错误的。事实上,在贾斯珀发帖3天后,它就变成了假的。blog.heroku.com/archives/2011/9/28/python_和_django
这是思考这个问题的错误方法。
Web上的可伸缩性来自于扩展应用服务器的数量,而不是加速单个应用服务器。
Ruby和Python都是慢语言,有问题的多线程和垃圾收集器。不管怎样,我们使用它们是因为它们非常擅长允许开发人员编写更简单的程序来更好地完成工作。不值得为这个问题操心,这两个运行时中的哪一个性能更好。
只要您保持良好的Web体系结构,并且应用程序服务器是无状态的(所有状态都保存在数据库或cookie中,而不是在服务器端会话中),那么只要合理,就不应该关心单个请求的实际性能。因为如果您的应用服务器是无状态的,那么您可以水平地扩展该层,以满足对可伸缩性的任何需求。
- 这个。Rails和Django的性能都很好,如果您真的想让某个东西具有超级可扩展性,那么一般来说,您应该避开Web框架。如果这是一个"侧面项目",那就按照你最喜欢的方式去做,总有缓存层和其他可以快速缩放的更改。
- 谢谢@justice;一切都有道理。我理解应用服务器的水平可伸缩性与单个服务器的性能无关。因此,我为什么要把这些问题作为两个独立的、截然不同的问题来问1和2。干杯。
- 如我所说,原始性能问题(根本不是可伸缩性问题)是:Ruby和Python都很慢,多线程性能差,垃圾收集器也不好——至少与其他运行时相比,它们具有很好的多线程和垃圾收集功能,而且速度很快。如果您要在一台服务器上寻找原始性能,可以使用.NET或JVM语言,或者另一种高级垃圾收集本机线程,不使用gil运行时(如ghc)。问两个乌龟中哪一个速度更快,似乎很愚蠢。它们都是乌龟。
- 也就是说,JRuby/Jython是相当不错的替代品……您必须小心JRuby/Rails,如果不合并到几个补丁中,消除对流控制异常的依赖,HAML可能会损害您的性能。异常在Ruby中很便宜,但在JRuby使用Java异常框架后就没有那么多了。如果你能解决这个问题,JRuby有非Gil线程。:)
- @Yfeldblum什么是ghc和gil?
- python不是垃圾收集的,它的引用计数。
- gil代表全球翻译锁。它基本上是一种说"这个资源被这个线程锁定,所以后退",它暂停其他线程直到释放它。另一方面,多线程应用程序只能真正实现单线程性能。我觉得这是哈斯克尔的事?不确定!
- 这不能回答问题。问题是关于两种技术之间的性能可伸缩性。我也有同样的问题。对于正在启动新项目的人来说,了解他们所选择的技术的优点和缺点是很重要的。
https://stackoverflow.com/questions/91846/rails-or-django-or-something-else-其他姜戈秤吗?使用Rails作为大型网站的框架https://stackoverflow.com/questions/3042259/django-or-railsRails还是Django?
…
关于这个问题有很多问题,没有一个回答这个问题——没有正确的答案。
我认为您不应该在这两个指标上选择框架。除非你正在建立下一个Facebook,否则两者都将根据你的需求进行扩展。同样,两者都应该满足您的需求。相反,看看语言和框架的哪些特性对您的应用程序等有吸引力。