یکی از بزرگترین دلایل کند شدن پروژههای جنگویی، اجرای کوئریهای تکراری روی دیتابیسه که بهش چالش N+1 میگن. فرض کن میخوای لیست کتابها و نام نویسنده هر کتاب رو نمایش بدی. اگر کد رو اینطوری بنویسی، جنگو برای هر کتاب یه کوئری جداگانه به جدول نویسندهها میزنه:
books = Book.objects.all()
for book in books:
print(book.author.name) # اجرای یک کوئری اضافه به ازای هر کتاب!
برای حل این مشکل کافیه از select_related استفاده کنی تا جنگو با یک Joint ساده در دیتابیس، همه اطلاعات رو یکجا بکشه بیرون و سرعت لود صفحه رو چند برابر کنه:
books = Book.objects.select_related('author').all()
for book in books:
print(book.author.name) # بدون کوئری اضافههمیشه قبل از دیپلوی کردن پروژه، تعداد کوئریهاتون رو با Django Debug Toolbar چک کنید تا سرور زیر بار نره.
🐍 @python_rd