博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
django后台加载从15秒优化到1秒的过程小记
阅读量:4299 次
发布时间:2019-05-27

本文共 1296 字,大约阅读时间需要 4 分钟。

之前django的后台管理的管理的项目很慢,打开个页面得花十几秒甚至二十秒,经过不断努力优化,终于优化到1秒左右了,很舒服。

先定位慢的主要原因,首先有个表大概有200万条数据,而且机器每天不停地写入,增长很快。再利用diango-debug-toolbar很方便查看出哪些东西耗时,主要查看各种耗时的sql语句。

主要耗时的部分包括:django分页,list_filter,date_hierarchy,有个字段调用第三方接口

list_filter,date_hierarchy优化参见:

django分页优化参见:

进行完上面的优化后,页面加载时间大概需要6秒。

之后又将机器和编辑用的表分开,编辑的表很小,这样其实前面的sql耗时几乎可以忽略了。但是页面加载时间仍然需要6秒左右。

最后又定位了调用外部接口的一个字段需要四五秒。

因为字段是同步调用的,每个列表页二十个,每个调用大概0.2秒。加起来时间就久了。最终我的解决方法就是利用多线程同时请求接口获取数据。

核心就是重写ChangeList的get_results方法,拿到20个model对象后,开启20个线程调用接口获取数据,存入缓存,渲染字段时直接从缓存中拿数据。ps:这是难得不百度(貌似是没百度到。。。),自己搞定的东西。。。所以看源码还是有用的

from django.contrib.admin.views.main import ChangeListclass ChangeListAdmin(ChangeList):    def get_results(self, request):        thread_list = []        #get all of model object from current page list        super(ChangeListAdmin, self).get_results(request)        for model in self.result_list:            t = Thread(target=self.get_ctr, args=(model,))            t.start()            thread_list.append(t)        for t in thread_list:            t.join()

因为重写了ChangeList,所以admin.py中注意重写get_changelist方法,用我们自己重写的ChangeListAdmin类

def get_changelist(self, request, **kwargs):    return ChangeListAdmin

做完这个优化后,调用接口的时间缩小到1秒多了。

但是有时候调用接口会timeout,索性直接不调接口直接查询数据库了,应该是56核 256G内存的服务器性能比较强劲,直接查数据库后获取这20个字段的时间基本缩小到0.5秒内了。

现在整个页面打开只需要1秒左右了。

转载地址:http://fkxws.baihongyu.com/

你可能感兴趣的文章
关闭linux防火墙让windows宿主机访问ubuntu虚拟机web服务以及docker
查看>>
pycharm 找不到同目录文件,但是终端中正常的小记
查看>>
安装了grpc但是无法导入:ImportError: No module named 'grpc'
查看>>
Python中logging模块的基本用法
查看>>
Python查看第三方库、包的所有可用版本,历史版本
查看>>
一键将Python2代码转成Python3小记,
查看>>
Python要求O(n)复杂度求无序列表中第K的大元素
查看>>
Python 各种进制互相转换的函数
查看>>
python的单例理解、__new__、新式类object以及python2和python3下__new__的区别。
查看>>
Python动态规划以及编辑距离——莱文斯坦距离小记
查看>>
pycharm控制台报错:xmlrpc.client.Fault: Fault 0: 'java.lang.NullPointerException
查看>>
Python打印二叉树的左视图、右视图
查看>>
OpenStack Mitaka Horizon 主题开发
查看>>
OpenStack Mitaka keystone 分页(pagination)实现
查看>>
OpenStack删除Cinder盘失败解决办法
查看>>
Linux cpu 详解
查看>>
GitHub + Hexo 搭建个人博客
查看>>
Linux Ubuntu 修改网卡名字
查看>>
OpenStack Ocata Horizon 开发(一)—— 快速开始
查看>>
自定义Horizon
查看>>