Ninja Learn | نینجا لرن
1.26K subscribers
102 photos
38 videos
11 files
314 links
یادگیری برنامه نویسی به سبک نینجا 🥷
اینجا چیزایی یاد میگیری که فقط نینجاهای وب‌ بلدن 🤫

📄 Send me post: https://t.iss.one/NoronChat_bot?start=sec-fdggghgebe

👥 ɢʀᴏᴜᴘ: https://t.iss.one/+td1EcO_YfSphNTlk
Download Telegram
#پست_جدید

💎 مشکل N+1 توی جنگو 💎

امروز می‌خوایم در مورد یکی از مشکلاتی که ممکنه توی پروژه‌های جنگو باهاش برخورد کنیم صحبت کنیم. این مشکل اسمش N+1 هست و اگه بدونیم چیه و چطوری حلش کنیم، می‌تونیم برنامه‌های بهینه‌تر و سریع‌تری بنویسیم.


مشکل N+1 چیه؟

فرض کنید یک وبسایت فروشگاهی داریم که توش محصولات و دسته‌ بندی های محصولات داریم. هر محصول به یک دسته تعلق داره و هر دسته می‌تونه چندین محصول داشته باشه.

class Category(models.Model):
    name = models.CharField(max_length=100)

class Product(models.Model):
    name = models.CharField(max_length=100)
    category = models.ForeignKey(Category, on_delete=models.CASCADE)


اگه بخوایم لیستی از محصولات به همراه اسم دسته بندی شون نمایش بدیم، بدون استفاده از متد select_related برای هر محصول یک کوئری جداگونه برای دریافت اطلاعات دسته بندی اجرا میشه. این یعنی اگه 10 محصول داشته باشیم، 11 کوئری به دیتابیس ارسال می‌شه که این خیلی بده مخصوصا اگه تعداد محصولات توی دیتابیس خیلی زیاد باشه.


چطوری از این مشکل جلوگیری کنیم؟


1️⃣ متد select_related:

جنگو ابزارهای خوبی برای حل این مشکل در اختیارمون قرار داده. یکی از این ابزارها، متد select_related هست. با استفاده از این متد می‌تونیم همه اطلاعات مرتبط با یک آبجکت رو در یک کوئری از دیتابیس بخونیم. به این ترتیب، تعداد دفعات مراجعه به دیتابیس به شدت کاهش پیدا می‌کنه و برنامه‌مون خیلی سریع‌تر اجرا میشه.


مزایای استفاده از متد select_related؟

1- سرعت بیشتر: چون تعداد دفعات مراجعه به دیتابیس رو کم می‌کنه.
2- کاهش بار سرور: با کاهش تعداد کوئری‌ها، فشار روی سرور کمتر میشه.
3- کد تمیزتر: کدت منظم‌تر و قابل فهم‌تر میشه.


2️⃣ ابزار django-debug-toolbar:

جنگو یک ابزار دیباگ خیلی خوب داره به اسم django-debug-toolbar که بهتون کمک می‌کنه تا بتونین مشکلات پرفورمنسی برنامه‌تون رو شناسایی کنین. این ابزار بهتون نشون می‌ده که کدتون چند بار به دیتابیس مراجعه کرده و کجا مشکل N+1 وجود داره. با استفاده از این ابزار می‌تونین به راحتی مشکل N+1 رو پیدا کنین و برطرفش کنین.

⭕️ برای نصب این پکیج به این آدرس برید:
https://django-debug-toolbar.readthedocs.io/en/latest/installation.html


جمع‌بندی:

مشکل N+1 یکی از مشکلاتی هست که ممکنه در پروژه‌های جنگو باهاش برخورد کنین. این مشکل باعث میشه که برنامه‌تون کند بشه و پرفورمنسش کاهش پیدا کنه. با استفاده از متد select_related و ابزار django-debug-toolbar می‌تونین به راحتی این مشکل رو حل کنین و برنامه‌های بهینه‌تر و سریع‌تری بنویسین.

امیدوارم این پست برای شما مفید بوده باشه. اگه سوالی داشتین، حتما بپرسین.

#جنگو #برنامه_نویسی #مشکل_N_plus_one #بهینه‌سازی #django_debug_toolbar
👍10