是否可以使用 Cython 优化在 Django 中开发的关键任务应用程序的速度?
最近我在网上看到,Cython 可以将 Python 代码转换为 C 一样的速度。Django可以做到这一点吗?
是否可以使用 Cython 优化在 Django 中开发的关键任务应用程序的速度
这是值得怀疑的。
大多数 Web 应用程序响应时间是必须单独下载的非 HTML 元素。通常的经验法则是每个 HTML 页面有 8 个静态文件。(.CSS、.JS、图像等)
由于这些静态内容都不是来自 Django,因此您的大多数 Web 应用程序的时间线都是 Apache(或 Nginx 或 Django 之外的一些其他服务器软件)。
仅查看生成 HTML 的时间时,您会发现大部分时间都花在等待数据库上(即使是内存中的 SQLite,您也会看到数据库往往会主导时间线)
当您使 Apache 和数据库快速运行时,然后——而且只有那时——你可以考虑 Python 元素。
底线。不要浪费任何时间让 Django 和 Python 运行得更快。
嗯,是的,但网络应用程序所做的大多数事情都不会真正从这种变化中受益,除非你有确凿的证据证明它会这样做。配置两次,优化一次。
从概念上讲,你追求的是可能的,但你正在寻找错误的方向。
你真的应该对 PyPy 感兴趣,它对于 Django(和 Python)社区来说是一项非常有前途的技术。与普通 Python 相比,PyPy 上的 Django 基准测试已经显示出12.5 倍的速度提升。现在,即使前端静态资源可能有助于最终用户的大部分页面响应(根据上面 S.Lott 的回答),但这并不能解决服务器端速度提升非常重要的现实。出于这个原因,Facebook 不得不发明 HipHop PHP……PHP 的滞后性无法消除它。言归正传,简单地考虑一下 Meebo(一个 python 驱动的网站)每月在服务器基础设施上花费数万美元。现在你可以尝尝 PyPy 节省的服务器成本了吗?性感!
与其他答案相呼应,这不太可能使您获得任何特定收益,除非您当然已经描述了可以从中获得一些好处的特定案例。
除了答案之外,我想指出雅虎网络团队的网络优化列表。这些是在适用于许多网站的领域中经过衡量和证明的收益,值得研究:
Exceptional Performance 团队已经确定了一些加快网页速度的最佳实践。该列表包括 35 个最佳实践,分为 7 个类别。
我们已经构建了一个安装在客户站点上的名为InProd的应用程序,它管理由 Genesys 提供支持的联络中心的配置。它是一个用 Cython 编译的 Django 应用程序。
速度有所提高,但幅度不大。我们需要每秒处理大量请求,而这样做的主要延迟是由数据库引起的。最大的收获是数据库调优和良好的 sql。
您需要非常强烈地需要做这样的事情,因为它确实会导致持续出现的问题,它会增加我们的测试要求。
某些任务的性能差异可能很大,但不是全部。因此,改进将取决于您的应用程序在做什么。
这取决于您是否在后端有繁重的进程。就我而言,它可以改进其中一个过程并将其加速约 5 倍。我有一个函数可以修改用户输入的大型 XML 文件并将输出保存到数据库中。告诉 Cython,在某些地方输入或输出是字符串,这确实是 5 倍加速魔法。