一:Django的QuerySets对象是有缓存的,一旦取出来,它就会在内存中存储一段时间,尽量重用它。
user = UserProfile.objects.get(id=1)
user.phone #第一次取出来使用,是要对数据库进行访问
user.username #第二次再用,就是缓存中的实体了,不需要再访问数据库
注意如果使用all函数,则每一次都会请求访问数据库
二:能去redis等等缓存中获取到数据就可以别连接到数据库去处理结果
三:使用QuerySets的迭代器功能,先缓存起来,避免占用太多内存
四:避免all,使用filter过滤筛选数据
五:单一动作需要多次连接数据库时,最好一次性取出所有需要的数据,减少连接数据库次数。
六:Django中的查询是惰性的。这意味着在你真正需要获取数据之前它不会访问数据库。同时,它只获取你指定的数据,如果需要其他附加数据,则要另外发出请求。为了提取所有需要的数据,可以在查询集上使用select_related()。
七:默认情况下,Django会从数据库中提取所有字段。defer()和only()这两个查询方法来改进。第一个用于指定哪些字段不要加载,第二个用于指定只加载哪些字段。
八:如果像我一样采取的是Django-rest框架,那么我们可以自定义序列化层,这几乎可以缩短一半的时间
九:第三方扩展应用可能会花费时间,我们可以更新三方应用,或者自己造轮子来减少response时间
十:应用层设置缓存,数据库用redis作为数据库缓存的中间件
十一:在部署环境下,加载模版使用缓存,设置数据库持久化连接