Django性能优化
掌握数据库查询优化、缓存策略和静态文件处理技巧。 · 难度:入门 · +15XP
性能优化概览
Django应用性能瓶颈通常出现在数据库查询、模板渲染和静态文件加载。下面介绍几种常用优化手段。
1. 数据库查询优化
使用select_related和prefetch_related减少查询次数:
# 低效:N+1查询
books = Book.objects.all()
for book in books:
print(book.author.name) # 每次循环都查询作者
# 高效:一次性JOIN
books = Book.objects.select_related('author').all()
for book in books:
print(book.author.name)2. 使用索引
class Article(models.Model):
title = models.CharField(max_length=200, db_index=True)
pub_date = models.DateTimeField(db_index=True)3. 模板缓存
{% load cache %}
{% cache 500 sidebar %}
<!-- 耗时的模板片段 -->
{% endcache %}4. 静态文件处理
使用django-compressor压缩CSS/JS,或使用CDN分发。
| 工具/方法 | 作用 |
|---|---|
| select_related | 解决OneToOne/ForeignKey的N+1 |
| prefetch_related | 解决ManyToMany的N+1 |
| db_index | 加速WHERE和JOIN |
| Gunicorn + uWSGI | 提升并发处理能力 |
练习提示: 在starter_code中,使用select_related优化查询,并测量优化前后的数据库查询次数。