1.一次性取出你所需要的数据

单一动作,需要多次连接数据库里的时候,最好一次性取出所有需要的数据,减少连接数据库的次数。此类需求推荐使用QuerySet.select_related()和prefetch_related()

相反,别取出你不需要的东西,模板templateds里往往只需要实体的某几个字段而不是全部,这时使用queryset.values()和values_list()对你有用,他们只取出你需要的字段,返回字典dict和列表list类型的东西,在模板里面够用就可以,这可以减少内存损耗,提高性能。

使用queryset.count()代替len(queryset),虽然这两个处理出来的结果是一样的,但是前者性能优秀很多。同理判断记录存在的时候,queryset.exists()比if queryset实在强的太多了。

当然一样的结果,当缓存里面已经存在的时候,就别再滥用count(),exitst(),all()函数了。

2.减少数据库连接的次数

使用queryset.update()和delete(),这两个函数是可以批量处理多条记录的,使他们事半功倍;如果可以,被一条条数据去update  delete处理,对于一次性取出来的关联记录,获取外键的时候,直接取关联表的属性,而不是取关联属性,如entry.blog.id优于enrty.blog_id

3.在配置使用相对路径

某些原因使得项目可能常常会被来回的迁移,如果事先没有规划好这种可能性的话,这绝对是一个棘手的问题,有一个极好的技巧能够确保你的Django项目在部署的过程中能够轻松来回迁移,仅仅只需要编写几行代码就可以在你的配置文件settings.py中。、

import  os

BASE_DIR=os.path.dirname(os.path.abspath(__file__)

TEMPLATE_DIRS=(

BASE_DIR+'/templates',

)

4.使用Django-chunks

除了使用Django的富文本编辑器创建模块更日益之外,Django-chunks同样是用于模块中,这个是重用代码块必不可少的工具。

5.使用缓存

如果性能在你的DJango项目中已经成为棘手的问题,那么你将需要使用一些缓存策略,然而Django为缓存提供很多的选择,目前最好的无疑是Memcache,用Django安装memcache非常的简单,如果你使用memcache模块的时候,只要模块安装完成后,你仅仅修改一行配置项,你的Django页面变得轻快起来。

6.Django-debug-toolbar

它是一个非常方便的工具,可以深入了解代码的工作以及它花费了多少时间。特别是他可以显示你的页面生成的SQL查询,以及每个人花了多少时间。

一个在github上面的开源项目:https://github.com/dcramer/django-devserver

很棒的一个可视化工具,但是缺点只能处理text/html类型的response,因为是通过中间件修改返回的html代码实现的

解决方法:开源使用这个库,django-debug-panel

在配合链接中最后的chorme插件来使用,就可以查看所有异步请求中的详细信息。

优点:

统计了总的sql查询时间

重复查询的sql的数量,在每条sql详细信息中显示重复的次数。

执行了sql的具体代码位置

sql语句的高亮

sql查询到的数据结果。

配置参考:

# debug_toolbar settings
if DEBUG:
INTERNAL_IPS = ('127.0.0.1',)
MIDDLEWARE_CLASSES = (
# 'debug_toolbar.middleware.DebugToolbarMiddleware',
'debug_panel.middleware.DebugPanelMiddleware',
) + MIDDLEWARE_CLASSES INSTALLED_APPS += (
'debug_toolbar',
'debug_panel',
) if settings.DEBUG:
import debug_toolbar
urlpatterns = [
url(r'^__debug__/', include(debug_toolbar.urls)),
] + urlpatterns

第三方面板也可以用于工具栏,可以(例如)报告缓存性能和模板呈现时间。
Third-party services

有一些免费服务奖从远程HTTP客户端的角度分析和报告您的网站的页面的性能,实际上模拟实际用户的体验。

这些不能报告您的代码的内部,但是可以提供有用的洞察您的网站的整体性能,包括不能从DJango环境中充分测量的方面。

实例包括:

雅虎Yslow

George pagespeed

还有一些付费服务执行类似的分析,包括一些是Django感知的,可以与您的代码库继承,以更广泛的分析其性能。

7.line  profiler

最好用的还是去line  profiler去找程序的瓶颈,显示一个方法内哪行代码运行的时间最久。

8.在较低级别而不是较高的级别执行此工作计划总是更快。在更高层次,系统必须通过多级抽象和多层机械来处理对象。

也就是说,数据库通常可以比python更快的完成事情,这样比模板语言更快。

9.HTTP performance

Middleware

Django附带了一些有用的middleware,可以帮助优化您的网站的性能,他们包括

conditionGetMiddleware

添加了对现代浏览器的支持,可以根据ETag和Last-Modified标头有条件的获取响应。
GzipMiddleware

压缩所有现代浏览器的响应,节省带宽和传输时间,亲注意,GzipMiddleware目前被认为是一种安全风险,并且容易受到TSL/SSL提供的保护无效的攻击,有关详细的信息,请参阅GzipMiddleware中的警告。

10.Session

Using Cached session

Using  Cached session可能是一种通过消除从像数据库这样比较慢的存储源加载的会话数据而改为经常使用的会话数据存储在内存中来提高性能的方法。

11.Static  Files

静态文件,根据定义是不动态的,使优化增益的一个优秀的目标。

Minification

一些第三方Django工具和包提供了缩小HTML,css,javascript的能力,他们删除不必要的空格,换行符和注释,缩短变量名,从而减少您的网站发布文档的大小。

12.Template  Performance

注意:

使用{% 阻止 %} 比使用{% 包括 %}

从许多小块的组装的重碎片模块可能会影响性能。

The  cached  template   loader

启用cache  temolate  loader通常会大幅提高性能,因为它避免每次需要时编译每个模板渲染。
13.在代码方面的优化

核心模块使用cpython来实现,大幅度提高代码的运行速度。

Django性能优化的几种方法的更多相关文章

  1. Spring/Hibernate 应用性能优化的7种方法

    对于大多数典型的 Spring/Hibernate 企业应用而言,其性能表现几乎完全依赖于持久层的性能.此篇文章中将介绍如何确认应用是否受数据库约束,同时介绍七种常用的提高应用性能的速成法.本文系 O ...

  2. vue-cli 项目优化之3种方法对比:本地静态库资源(推荐)、cdn、DllPlugin

    vue-cli 项目优化之3种方法对比:本地静态库资源(推荐).cdn.DllPlugin 事项 本地静态库资源 cdn DllPlugin 依赖 依赖cdn网站资源(有种完善方法:如果cdn引入不成 ...

  3. django查询表记录的十三种方法

    django查询表记录的十三种方法 all() 结果为queryset类型 >>> models.Book.objects.all() <QuerySet [<Book: ...

  4. Web 性能优化:21 种优化 CSS 和加快网站速度的方法

    这是 Web 性能优化的第 4 篇,上一篇在下面看点击查看: Web 性能优化:使用 Webpack 分离数据的正确方法 Web 性能优化:图片优化让网站大小减少 62% Web 性能优化:缓存 Re ...

  5. django性能优化

    1. 内存.内存,还是加内存 2. 使用单独的静态文件服务器 3. 关闭KeepAlive(如果服务器不提供静态文件服务,如:大文件下载) 4. 使用memcached 5. 使用select_rel ...

  6. Unity性能优化的N种武器

    贴图: l  控制贴图大小,尽量不要超过 1024 x1024: l  尽量使用2的n次幂大小的贴图,否则GfxDriver里会有2份贴图: l  尽量使用压缩格式减小贴图大小: l  若干种贴图合并 ...

  7. sql 优化的几种方法

    .对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. .应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而 ...

  8. sql语句优化的30种方法

    转载于:https://www.cnblogs.com/Little-Li/p/8031295.html 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的 ...

  9. 用django实现redirect的几种方法总结

    用django开发web应用, 经常会遇到从一个旧的url转向一个新的url.这种隐射也许有规则,也许没有.但都是为了实现业务的需要.总体说来,有如下几种方法实现 django的 redirect.1 ...

随机推荐

  1. redis集群之Sentinel

    目前我们讲的 Redis 还只是主从方案,最终一致性.读者们可思考过,如果主节点凌晨3 点突发宕机怎么办?就坐等运维从床上爬起来,然后手工进行从主切换,再通知所有的程序把地址统统改一遍重新上线么?毫无 ...

  2. 程序基于InstallShield2013LimitedEdition的安装和部署

    在VS2012之前,我们做安装包一般都是使用VS自带的安装包制作工具来创建安装包的,VS2012.VS2013以后,微软把这个去掉,集成使用了InstallShield进行安装包的制作了,虽然思路差不 ...

  3. 从新手小白到老手大白的心路历程-First Blog

    本人于2019年毕业重庆市某一所乡间大学,所学专业方向是.net,至今已经工作了1个多月了,天天被上司骂,还差点儿被开除,但我死皮赖脸的勉强的“活”了下来,在今后的日子里面,我会陆续的分享我的成长经历 ...

  4. nginx缓存页面后,串会话问题的解决方案

    用的Nigix  后面挂了二个Tomcat是springMVC  session存在Redis的项目 但是上线以后反应A用户添加数据,变成B用户的,网上查的方案如下: 解决方案,nginx提供prox ...

  5. Eclipse 笔记

    2004年前的开发架构:(操作系统+数据库+中间件+开发工具) AIX + DB2 + WAS + WSAD  ===  皇家级 UNIX/Linux + Oracle +BEA WebLogic + ...

  6. LeetCode——Employees Earning More Than Their Managers

    The Employee table holds all employees including their managers. Every employee has an Id, and there ...

  7. [ElasticSearch]Java API 之 滚动搜索(Scroll API)

    一般搜索请求都是返回一"页"数据,无论数据量多大都一起返回给用户,Scroll API可以允许我们检索大量数据(甚至全部数据).Scroll API允许我们做一个初始阶段搜索并且持 ...

  8. java 并发编程面试题及答案

    1.在java中守护线程和本地线程区别? java中的线程分为两种:守护线程(Daemon)和用户线程(User). 任何线程都可以设置为守护线程和用户线程,通过方法Thread.setDaemon( ...

  9. nrm : 无法加载文件 C:\Users\TANG\AppData\Roaming\npm\nrm.ps1,因为在此系统上禁止运行脚本。

    1.win+s 搜索powershell 以管理身份运行 2.使用set-ExecutionPolicy RemoteSigned命令将计算机上的执行策略更改为 RemoteSigned,输入Y确定 ...

  10. tornado的请求与响应

    tornado请求与响应相关 一.配置文件config.py 中的settings 有哪些配置: debug:设置tornado是否工作再调试模式下,默认为false 即工作再生产模式下 true的特 ...