为了账号安全,请及时绑定邮箱和手机立即绑定

Python 2 到 3 升级后 Django 初始页面加载缓慢

Python 2 到 3 升级后 Django 初始页面加载缓慢

喵喔喔 2022-06-02 11:27:53
我运行 Django 1.11.20。我刚刚(终于)从 Python 2.7 跳到了 3.7。我注意到自从升级到 Python 3 后,清除缓存后的第一页加载非常慢。到目前为止,我的开发机器上只有我的 Python 3 环境,所以我在使用./manage.py runserver和FileBasedCache后端时遇到了这个问题。我不知道我是否会在生产堆栈(nginx、uwsgi、redis 等)上遇到同样的事情。我正在使用 Django 调试工具栏,它给了我一些关于问题不是什么的提示,但我不确定我应该在哪里查看问题所在。在我的开发机器上的 Python 2.7 环境中,调试工具栏运行加载一个带有空缓存的简单页面的时间是:中央处理器:4877.89 毫秒SQL 462.41 毫秒缓存:1154.54ms在我的开发机器上的 Python 3.7 环境中,调试工具栏运行加载具有空缓存的同一页面的时间是:CPU:91661.71msSQL 350.44 毫秒缓存:609.65ms(我在这台开发机器上使用基于文件的缓存,所以当我说“使用空缓存”时,我只是指rm -r cache在浏览器中加载 URL 之前。)因此,升级后 SQL 和缓存时间稍微加快了一些,但 CPU 时间增加了一倍。当我在调试工具栏中打开“时间”面板时,我看到增加的“时间属性”是“请求”。同样的事情发生在每个页面上(包括只是由 生成的 HTML 的页面TemplateView,所以它们没有做任何棘手的事情),但只有当它第一次从空缓存加载时才会发生。在第一次响应之后,所有页面都恢复到与 Python 2 环境中大致相同的响应时间。所以这与初始请求有关。我不确定在哪里可以尝试找出 Django 仅在第一个请求时在做什么。任何指针?或者有什么明显的东西可以让我在从 Python 2.7 到 3.7 的跳跃中变慢?
查看完整描述

1 回答

?
慕村9548890

TA贡献1884条经验 获得超4个赞

我终于能够将这个问题追溯到 Django 调试工具栏本身,它在我的 Python 3 升级期间从 1.11 升级到 2.0。具体来说,工具栏的 SQL 面板导致速度变慢。如果缓存对象不存在,我有一个上下文处理器执行查询。查询本身很快,但由于某种原因,Django Debug Toolbar 2.0 为其生成堆栈跟踪非常慢。我还没有弄清楚 1.11 和 2.0 之间发生了什么变化导致了这种可怕的性能损失,但现在我知道问题出在哪里,我可以解决它。



查看完整回答
反对 回复 2022-06-02
  • 1 回答
  • 0 关注
  • 101 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号