Django代码性能优化与Pycharm Profile使用详解
框架(架构)  /  管理员 发布于 7年前   222
前言
pycharm是python的一个商业的集成开发工具,本人感觉做python开发还是很好用的,django是一个很流行的python web开源框架,本文将通过实例代码给大家介绍了关于Django代码性能优化与Pycharm Profile使用的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧
是一段导出数据月报的脚本,原先需要十几秒,优化后只需要1秒多。
Pycharm Profile
优化第一步就是Profile,先看看慢在哪里。Pycharm自带Profile工具,很方便。
拿一张官方图说明一下。
图表说明:
有了Profile,剩下的事情就好办了。
首先,看到了有个工具函数调用了9千多次,这个函数用到了nametupled,花了很多时间,于是把nametupled去掉,节省了好几秒的时间。
开启Django logger并设置DEBUG级别
继续Profile,看到时间主要在ORM查询数据库那里。
这时,开启Django本身的logger,级别调到DEBUG,这样就会打印出查询的SQL语句。
N+1问题
首先意识到的是ORM查询的N+1问题。
比如有个Order表,里面有个外键user_id是关联User表.当我们
for order in Order.objects.all(): order.user.id
的时候,Order.objects.all()只有1条sql语句,获取Order表本身的字段到内存,而不会将关联的外键也获取。
当我们order.user_id的时候,不会触发额外的sql查询,而order.user.id的时候,会额外查询User表。
for循环执行了N次,就额外sql查询了N次。故叫N+1问题。
解决N+1的方法:
又节省了几秒的时间。
只查询需要的字段
继续看log,发现sql查询次数是减少了很多,然而sql查询语句很长,看来是把所有字段都查询出来。
然而我很多时候只需要某几个字段而已,这样全查出来就浪费了。
解决方法:
An F() object represents the value of a model field or annotated column. It makes it possible to refer to model field values and perform database operations using them without actually having to pull them out of the database into Python memory.
至此,将整段代码的执行时间减少到了1.5秒。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对AIDI的支持。
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号