آنچه در این مقاله می‌خوانید [پنهان‌سازی]

افزایش سرعت Django Admin معمولا به بهینه سازی Query ها، مدیریت درست Model ها و کاهش عملیات سنگین داخل پنل ادمین مربوط می‌شود. وقتی Django Admin کند می‌شود، معمولا مشکل از تعداد زیاد Query ها، نمایش داده‌های سنگین، استفاده اشتباه از Relationship ها یا لود شدن حجم زیاد اطلاعات است. اگر این مشکلات به موقع برطرف نشوند، کار کردن با پنل مدیریت پروژه به مرور سخت و آزاردهنده می‌شود.

چرا Django Admin کند می‌شود؟

Django Admin به صورت پیش فرض برای پروژه‌های کوچک و متوسط عملکرد خوبی دارد.

اما وقتی:

  • تعداد داده‌ها زیاد شود
  • Model ها پیچیده شوند
  • Query ها سنگین شوند

پنل ادمین کم کم کند می‌شود.

این مشکل معمولا در:

  • فروشگاه‌ها
  • CRM ها
  • پنل‌های مدیریتی بزرگ

بیشتر دیده می‌شود.

Query های زیاد در Django Admin

یکی از اصلی‌ترین دلایل کندی Admin همین موضوع است.

مثلا:

list_display = ['title', 'author']

اگر author یک ForeignKey باشد، Django برای هر ردیف Query جدا اجرا می‌کند.

نتیجه:

  • تعداد Query بالا می‌رود
  • لود صفحه کند می‌شود

مشکل N+1 Query در Admin

این مشکل خیلی رایج است.

مثلا:

  • 100 ردیف نمایش داده می شود
  • برای هر ردیف اطلاعات Author جداگانه خوانده می شود

در نتیجه صدها Query اجرا می‌شود.

روش حل N+1 Query در Django Admin

باید از select_related استفاده شود.

مثلا:

class PostAdmin(admin.ModelAdmin):
    list_select_related = ['author']

این کار تعداد Query ها را به شدت کمتر می‌کند.

استفاده اشتباه از list_display

بعضی افراد داخل list_display متدهای سنگین قرار می‌دهند.

مثلا:

def total_orders(self, obj):
    return obj.orders.count()

این متد برای هر ردیف Query جدا اجرا می‌کند.

اگر تعداد داده زیاد باشد، Performance شدیدا افت می‌کند.

نمایش تعداد زیادی داده

بعضی پروژه‌ها هزاران رکورد را همزمان داخل Admin نمایش می‌دهند.

این موضوع:

  • RAM مصرف می‌کند
  • Query ها را سنگین می‌کند
  • زمان Load را بالا می‌برد

روش محدود کردن داده‌ها

می‌توانید Pagination را تنظیم کنید:

list_per_page = 20

این کار فشار روی پنل را کمتر می‌کند.

استفاده زیاد از ForeignKey و ManyToMany

وقتی Model ها رابطه‌های پیچیده داشته باشند، Django Admin Query های زیادی اجرا می‌کند.

مثلا:

  • Product
  • Category
  • Brand
  • Supplier

همزمان داخل Admin نمایش داده شوند.

این موضوع مخصوصا در پروژه‌های بزرگ مشکل ساز می‌شود.

مشکل Search سنگین در Admin

بعضی افراد Search را روی فیلدهای سنگین فعال می‌کنند.

مثلا:

search_fields = ['description']

اگر دیتابیس بزرگ باشد، Search کند می‌شود.

روش بهتر برای Search

بهتر است:

  • روی فیلدهای کوتاه Search انجام شود
  • فیلدهای مهم Index داشته باشند
  • Query ها محدود شوند

استفاده اشتباه از filter_horizontal

اگر داده‌ها زیاد باشند:

filter_horizontal = ['categories']

ممکن است باعث کندی شدید Admin شود.

مخصوصا وقتی هزاران رکورد وجود داشته باشد.

چگونه دلیل کندی Django Admin را پیدا کنیم؟

استفاده از Django Debug Toolbar

این ابزار یکی از بهترین روش‌ها برای تحلیل Query هاست.

نصب:

pip install django-debug-toolbar

این ابزار نشان می‌دهد:

  • چند Query اجرا شده
  • زمان هر Query چقدر بوده
  • کدام Query کند است

بررسی تعداد Query ها

می‌توانید Query ها را بررسی کنید:

print(connection.queries)

اگر تعداد Query زیاد باشد، مشکل معمولا از ORM است.

بررسی زمان پاسخ دیتابیس

گاهی مشکل فقط از Admin نیست.

ممکن است:

  • دیتابیس کند باشد
  • RAM کم باشد
  • CPU درگیر شده باشد

روش‌های افزایش سرعت Django Admin

استفاده از list_select_related

برای ForeignKey ها:

list_select_related = ['author']

این یکی از مهم‌ترین روش‌های بهینه سازی Admin است.

محدود کردن list_display

نباید داده‌های غیر ضروری نمایش داده شوند.

هر ستون اضافه:

  • Query بیشتر
  • Render سنگین‌تر
  • مصرف RAM بیشتر

ایجاد می کند.

استفاده از raw_id_fields

برای جلوگیری از لود سنگین Dropdown ها:

raw_id_fields = ['author']

این روش مخصوص دیتابیس‌های بزرگ خیلی مهم است.

استفاده از autocomplete_fields

روش بهتر:

autocomplete_fields = ['author']

این قابلیت فقط داده‌های لازم را لود می‌کند.

کاهش Query های متدها

اگر متدی داخل list_display دارید:

  • Query اضافی نزنید
  • داده‌ها را Cache کنید
  • Aggregation انجام دهید

استفاده از Index در دیتابیس

برای فیلدهای:

  • Search
  • Filter
  • Ordering

بهتر است Index تعریف شود.

مثلا:

title = models.CharField(max_length=255, db_index=True)

اشتباهات رایج برنامه نویسان Django

نمایش همه Relationship ها

بعضی پروژه‌ها اطلاعات زیادی داخل Admin نشان می‌دهند.

نتیجه:

  • Query زیاد
  • پنل سنگین
  • کند شدن شدید

Search روی Text های بزرگ

جستجو روی متن های طولانی Performance را خراب می‌کند.

استفاده زیاد از Inline ها

مثلا:

TabularInline

اگر تعداد داده زیاد باشد، صفحه بسیار سنگین می‌شود.

لود تصویرهای سنگین

نمایش تصویرهای بزرگ داخل Admin:

  • سرعت لود را کم می‌کند
  • RAM مرورگر را مصرف می‌کند

روش جلوگیری از کند شدن Django Admin

Query ها را مرتب بررسی کنید

خیلی از مشکلات Performance از Query های اضافی شروع می‌شوند.

Admin را ساده نگه دارید

Django Admin قرار نیست Dashboard سنگین فرانت اند باشد.

هرچه ساده‌تر باشد:

  • سریع‌تر است
  • نگهداری راحت‌تر است
  • مصرف منابع کمتر می‌شود

Pagination را جدی بگیرید

نباید هزاران داده همزمان نمایش داده شوند.

از Cache استفاده کنید

برای داده‌های تکراری:

  • Redis
  • Cache داخلی Django

خیلی کمک می‌کنند.

جمع بندی

افزایش سرعت Django Admin بیشتر از هر چیز به بهینه سازی Query ها و کاهش عملیات سنگین مربوط می‌شود. استفاده اشتباه از ForeignKey، Query های اضافی و نمایش حجم زیاد داده معمولا دلیل اصلی کند شدن پنل ادمین هستند. اگر Query ها را بهینه کنید و ساختار Admin را سبک نگه دارید، Performance پروژه به شکل محسوسی بهتر می‌شود.