1. 设计优化
- 前端设计优化
- 减少http请求,减少数据库的访问量,比如使用雪碧图
- 使用浏览器缓存,将一些常用的css, js, logo图标,这些静态资源缓存到本地浏览器,通过设置http头中cache-control和expires的属性来设定浏览器缓存,缓存时间可以自定义
- 对html, css, javascript 文件进行压缩,减少网络的通信量
- 后端设计优化
- 使用celery 消息队列。将耗时的操作放到队列里,让worker去监听队列里的任务,实现异步操作,比如发邮件,发短信
- 合理使用缓存技术。对一些常用到的动态数据,比如首页做一个缓存,或者某些常用的数据做个缓存,设置一定的过期时间,这样减少对数据库的压力,提升网站性能
- 优化部署方式。Nginx 部署项目,可以配置合适的参数,提升效率,增加并发量
- 搭建服务器集群,将并发访问请求,分散到多台服务器上处理
- 存储优化。如服务器磁盘使用固态硬盘读写
2. 数据库优化
- 设计表时,尽量少使用外键,因为外键约束会影响插入和删除性能
- 在 orm 框架下设计表时,能用 varchar 确定字段长度时,就别用 text
- 对于搜索频率高的字段属性,在定义时创建索引
- 合理使用 django 的 queryset 缓存与惰性
- 如果一个页面需要多次连接数据库,最好一次性取出所有需要的数据,减少对数据库的查询次数
- 按需取字段,如果只需要数据库中的一两个字段,就可以使用 values 或者 value_list
- 在模板标签里使用 with 标签可以缓存 Qset 的查询结果
3. 代码优化
- 优化代码算法时间复杂度
算法的时间复杂度对程序执行效率影响最大,在python中可以通过选择合适的数据结构来优化算法的时间复杂度,如list和set查找某个元素的时间复杂度分别是O(n)和O(1)。不同的场景有不同的优化方式,总得来说,一般有分治、分支界限、贪心、动态规划等思想 - 循环优化
尽量减少循环和递归的使用 - 合理地选择合适的函数
如读取大文件时使用生成器,而不是直接将整个文件都加载到内存中 - 并行编程
python因为GIL的存在,很难充分利用多核CPU的优势。但是可以对于CPU密集型的程序使用内置的multiprocessing模块实现多进程编程,对于IO密集型的程序使用threading模块或者multiprocessing.dummy模块进行多线程编程;也可以使用async包使用异步编程 - 特殊情况下使用原生sql
django的ORM使用简单,但是对于一些复杂的db操作不如原生sql快,因此针对一些复杂的db操作可以直接使用原生sql来处理 - 使用性能分析工具
可以使用timeit模块或者cProfile模块来分析程序的性能并颈,然后有针对性的优化