【问题标题】:Performance between Django and raw PythonDjango 和原始 Python 之间的性能
【发布时间】:2011-03-06 02:06:16
【问题描述】:

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

【问题讨论】:

    标签: python django


    【解决方案1】:

    Django 是普通的 Python。所以每个like语句或表达式的执行时间都是一样的。需要了解的是,在为 Web 开发时,许多组件组合在一起提供了几个优势:

    • 将常见任务移除到库中(身份验证、数据访问、模板、路由)
    • 算法的正确性(cookies/会话、加密)
    • 减少了直接影响错误计数、开发时间等的自定义代码(由于库)
    • 遵循约定可以改善团队合作和理解代码的能力
    • 插拔能力;创建或查找可以以最低集成成本使用的新功能块
    • 文档和帮助;许多人了解这项技术并能够提供帮助(StackOverflow?)

    现在,如果您要从头开始编写自己的网站,您至少需要自己实现几个组件。除非您花费大量时间开发您的网站,否则您也会失去上述大部分好处。 Django 和其他所有语言的其他 Web 框架旨在提供通用的东西,让您直接处理业务需求。

    如果您在 Web 框架兴起之前曾在 PHP 中使用过自定义会话代码和数据访问代码,您甚至不会想到与让您的工作更有趣和更轻松的框架相关的性能成本。

    现在,也就是说,Django 附带了很多组件。它的设计方式在大多数情况下不会影响您。尽管如此,每个请求都会执行大量的代码。如果您使用 Django 构建一个站点,但性能并没有降低它,您可以随意删除所有不需要的位。或者,您可以使用“苗条”python 框架。

    真的,只需使用 Django。这真是太棒了。它为许多站点提供动力,比您(或我)将要构建的任何站点大几百万倍。有一些方法可以显着提高性能,例如利用缓存,而不是优化自定义中间件的循环。

    【讨论】:

    • 就个人而言,我不会以不合格的“只使用 Django”作为结束——例如,如果他有更高级的 ORM 需求,那么与 SQLAlchemy 更紧密集成的框架可能是理想的。另一方面,您试图传达的最重要的事情(不要试图自己做很多工具可以为您做的事情)是正确的。
    • @Charles,这是一个公平的观点。 还有其他可以使用 python 构建的框架和工具,但我推荐 Django 而没有使用任何其他的:P
    【解决方案2】:

    取决于您的“普通 Python”如何制作网页。例如,如果它使用模板引擎,那么该引擎的性能将会产生巨大的差异。如果它使用数据库,那么您使用什么样的数据访问层(根据该层的要求)将会产生影响。

    因此,问题变成了一个问题,即您的任意(目前未说明的)工具链选择是否比 Django 选择的工具链具有更好的运行时性能。如果性能是您首要的、压倒一切的目标,那么您当然应该能够做出更优化的选择。但是,就总体成本而言 - 即。为运行时间较慢的选项购买更多的网络服务器,而不是为更多的工作开发选项购买更多的程序员时间——这个问题有太多的开放元素无法回答。

    【讨论】:

    • 好吧,我只是要使用显示来自服务器的 HTML 等的 .py 文件。我的意思是,如果差异不是很大,我宁愿使用 django 之类的东西来维护母版页等更容易。
    • +1。 @Corey:Django 只是 python。我不知道你计划在你的“普通 python”中实现多少 django,但总的来说我看不到重新发明轮子的好处——你仍然会使用第三方模板引擎,数据库接口、数据库本身等
    • @Corey:即使您的 .py 文件只是“打印”到 stdout 以显示 HTML 等,中间也需要一些胶水将进入网络服务器的请求转换为Python 解释器将理解并正确分派它们以最终执行您的 .py 文件的输入。那么,您需要自己实现这个中间件才能进行良好的比较。但是,“脚本”在哪里结束,Web 框架从哪里开始呢?最后,您实际上是在尝试重新发明 Django,或者自己实现一个新框架。
    • "Plain" .py 文件无法在网络服务器上显示任何内容——它们需要能够调用它们并让它们有机会生成 HTML 输出的东西。在这种情况下,我能想到的最接近“普通”Python 的将是 CGI 脚本,然后性能仍然高度依赖于 Web 服务器和 CGI​​ 网关,而且你错过了 Django 可以提供的所有细节.格言“过早的优化是万恶之源”适用于网络工具的选择,就像它适用于任何其他类型的编程一样。
    • 但这就是我的意思——我同意 Charles 的观点,即“普通 Python”在这种情况下并没有任何意义。无论是 Python+CGI、Python+mod_python、Python+mod_wsgi、Django 等,开发者的 Python 代码和 Web 服务器之间都有something,网关的选择会影响开发者与主机网络服务器,以及他们可以期望实现的性能。
    【解决方案3】:

    过早的优化是万恶之源。

    如果您在进行 Web 开发,Django 会让事情变得非常方便。如果您正在做认真的工作,那么加上拥有数百个用于常见任务的插件的社区将是一个真正的福音。

    即使您的“原始”实现速度更快,我认为它也不会快到足以严重影响您的 Web 应用程序。使用在正确抽象级别工作的工具构建它,如果性能是一个问题,测量它并找出瓶颈所在并应用优化。如果在这一切之后你发现 Django 创建的抽象正在减慢你的应用程序的速度(我不希望他们会这样),你可以考虑转移到另一个框架或手动编写一些东西。您可能会发现,您可以通过缓存、多台服务器之间的负载平衡以及执行“常用技巧”而不是通过重新实现 Web 框架本身来提高性能。

    【讨论】:

      【解决方案4】:

      Django 也是 普通 Python

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

      软件的大部分性能问题源于低效的代码,而不是工具和语言的选择。所以执行很重要。 AFAIK Django 在这方面做得非常出色,而且它的性能也超过了标准。

      【讨论】:

      • 我不确定我是否同意 Django 的性能高于平均水平。分析我雇主的大型应用程序时,我惊讶地发现我们过多的时间不是花在自定义逻辑或数据库访问上,而是花在模板渲染上(不是模板调用的应用程序代码,而是渲染过程本身)!可以肯定的是,不同设计的模板可能会对引擎造成较小的压力——但即便如此,结果也很难投出信任票。
      猜你喜欢
      • 1970-01-01
      • 2018-10-31
      • 1970-01-01
      • 2016-02-16
      • 1970-01-01
      • 1970-01-01
      • 2021-10-27
      • 2014-03-02
      • 2011-04-19
      相关资源
      最近更新 更多