Django和原生Python的性能比较

5

我想知道使用纯Python文件制作网页和使用Django之间的性能差异是什么。我只是想知道这两者之间是否存在显著差异。谢谢。

4个回答

12

Django是纯Python编写的。因此,每个like语句或表达式的执行时间都相同。需要理解的是,在开发Web时,许多组件被整合在一起以提供多个优势:

  • 将常见任务转化为库(身份验证、数据访问、模板化、路由)
  • 算法正确性(cookie/会话、加密)
  • 减少自定义代码(由于使用库),这直接影响缺陷数量、开发时间等
  • 遵循惯例有利于改善团队工作,并提高理解代码的能力
  • 插件功能;创建或查找可以最小化集成成本的新功能块
  • 文档和帮助;许多人了解这项技术并能提供帮助(例如StackOverflow)

如果您从头开始编写自己的网站,那么您需要至少自己实现几个组件。除非您花费了大量时间来开发您的网站,否则您将失去大部分以上的好处。Django和其他用于各种其他语言的Web框架旨在提供常见的元素,让您直接着手处理业务需求。

如果在Web框架兴起之前,您曾经在PHP中编写过自定义会话代码和数据访问代码,那么您甚至不会考虑与使您的工作有趣且更容易的框架相关的性能成本。

现在,Django内置了很多组件。它的设计方式使大多数时候它们不会影响您。尽管如此,每个请求执行的代码量仍然相当可观。如果您使用Django构建网站,但性能无法满足要求,那么可以随意删除您不需要的所有部分。或者,您可以使用“轻量级”Python框架。

实际上,直接使用Django即可。它非常强大。它已经支持了许多比您(或我)将要构建的任何东西都大得多的网站。有许多提高性能的方法,例如利用缓存而不是优化自定义中间件的循环。


2
就我个人而言,我不会轻易地说“只需使用Django”这样的话——如果他有更高级的ORM需求,比如需要更紧密地集成SQLAlchemy的框架可能更理想。另一方面,你试图传达的最重要的事情(不要试图自己做已经有无数工具可以为你完成的事情)是非常正确的。 - Charles Duffy
@Charles,那是个很好的观点。确实有其他用Python构建的框架和工具可以使用,但我在没有使用过其他任何框架的情况下推荐Django :P - Josh Smeaton

5

取决于你的“纯Python”如何制作网页。例如,如果它使用模板引擎,则该引擎的性能将会产生巨大的影响。如果它使用数据库,则你所使用的数据访问层(在该层的要求上下文中)将会有所不同。

因此,问题变成了你的任意(目前未公开)工具链选择是否比Django选择的更具运行时性能。如果性能是你的主要、最重要的目标,你肯定应该能够做出更优化的选择。但是,在总体成本方面——即为较慢的运行时选项购买更多的Web服务器,还是为更费力开发的选项购买更多的程序员工时——这个问题有太多的开放元素,无法回答。


我本来打算使用.py文件从服务器显示HTML等内容。我的意思是,如果差别不是很大,那么我更愿意使用像Django这样的东西,因为它可以通过主页面等方式使维护变得更容易。 - vt-cwalker
+1. @Corey:Django只是Python。你计划在“纯Python”中实现多少Django,我不知道,但总的来说,我看不出重新发明轮子的好处——你仍然会使用第三方模板引擎、数据库接口、数据库本身等。 - Yuji 'Tomita' Tomita
2
@Corey:即使你的.py文件只是通过“标准输出”来显示HTML等内容,也需要一些中间层的粘合剂来将进入Web服务器的请求转换成Python解释器能够理解和正确分派的输入,以最终执行你的.py文件。你需要自己实现这个中间件来进行良好的比较。但这时,“脚本”和Web框架之间的界限在哪里呢?最终,你本质上是在尝试重新发明Django,或者自己实现一个新的框架。 - Santa
2
“纯粹”的.py文件无法在Web服务器上显示任何内容 - 它们需要某些东西来调用它们并给它们机会生成HTML输出。在这种情况下,我能想到的最接近“纯粹”Python的可能是CGI脚本,但性能仍然高度依赖于Web服务器和CGI网关,而且您错过了Django可以提供的所有好处。格言“过早优化是万恶之源”适用于选择Web工具以及任何其他类型的编程。 - ncoghlan
@ncoghlan,实际上这有点不准确。Apache随附带有mod_wsgi,它能够执行Python。尽管该Python必须符合wsgi接口,但一旦被Web服务器调用,它可以调用自定义代码。 - Josh Smeaton
1
但这就是我的意思 - 我同意Charles的观点,即在这种情况下,“纯Python”并没有真正意义。无论是Python+CGI、Python+mod_python、Python+mod_wsgi、Django等,都有一些东西站在开发者的Python代码和Web服务器之间,选择网关将影响开发者与主机Web服务器的交互方式,以及他们可以期望实现的性能类型。 - ncoghlan

3

过早的优化是万恶之源。

Django在做网站开发时非常方便,再加上拥有数百个用于常见任务的插件的庞大社区,对于专业工作来说是一个真正的福音。

即使你的“原始”实现更快,我也不认为它能够严重影响你的Web应用程序。使用适当抽象级别的工具进行构建,如果性能成为问题,请测量并找出瓶颈所在,并应用优化。如果经过所有这些步骤后,你发现Django创建的抽象正在减慢你的应用程序(我并不指望它们会),你可以考虑切换到另一个框架或手动编写代码。你可能会发现,通过缓存、在多个服务器之间平衡负载以及执行“惯用技巧”,而不是重新实现Web框架本身,你可以获得性能提升。


2

Django同样是纯Python的。

性能主要取决于您的代码效率。

软件性能问题大部分源于低效的代码,而不是工具和语言的选择。因此,实现非常重要。据我所知,Django在这方面做得非常出色,其性能超过了标准。


我不确定我能同意Django的性能是高于平均水平的。在分析我们公司的非常大的应用程序时,我惊讶地发现,我们花费的时间不成比例的多,并不是用于定制逻辑或访问数据库,而是用于模板渲染(不是由模板调用的应用程序代码,而是渲染过程本身)!确实,设计不同的模板可能会减轻引擎的压力 - 但即使如此,结果也很难获得信任。 - Charles Duffy

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