Ninja Learn | نینجا لرن
1.27K subscribers
105 photos
41 videos
12 files
326 links
یادگیری برنامه نویسی به سبک نینجا 🥷
اینجا چیزایی یاد میگیری که فقط نینجاهای وب‌ بلدن 🤫

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

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

💎کوئری ست های بهینه در جنگو 💎


تا حالا شده برنامه‌تون مثل لاک‌پشت باشه و شما هم هی سر به دیوار بکوبید که چرا اینقدر کند شده؟ 😖

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

کوئری ست چیه و چرا مهه؟

کوئری ست یه جور جعبه هست که توش یه مشت اطلاعات از دیتابیس جمع میشه. مثلاً می‌خواییم همه محصولاتی که قیمتشون زیر 100 تومنه رو پیدا کنیم. QuerySet این کارو برامون انجام میده.


حالا چرا QuerySet اینقدر مهمه؟

چون نحوه ساختن این جعبه ، مستقیم روی سرعت برنامه‌مون تاثیر داره. اگه درست ساخته بشه، برنامه‌مون مثل برق کار می‌کنه و اگه اشتباه ساخته بشه، برنامه‌مون مثل لاک‌پشت میشه!

ترفندهایی برای کوئری ست ها با سرعت بالا

🅰 فقط اون چیزی رو بگیر که نیاز داری:

1️⃣ استفاده از ()only و ()defer:
فرض کن یه محصول کلی اطلاعات داره، از رنگش گرفته تا مدلش. اما تو فقط به اسم و قیمتش نیاز داری. با استفاده از ()only فقط همون اطلاعاتی که نیاز داری رو از دیتابیس بخون.


2️⃣ اجتناب از ()select_related و ()prefetch_related بی‌جا:
این دو تا مثل یه پل بین دو تا جدول هستن. اما اگه بی‌جا ازشون استفاده کنیم، کوری ست پیچیده میشه و سرعت برنامه‌مون کم میشه.


🅱  فیلتر کردن رو حرفه ای انجام بده:

1️⃣ فیلترهای منطقی: از فیلترهای and و or برای پیدا کردن دقیق‌تر اطلاعات استفاده کن.

3️⃣ فیلترهای تاریخ و زمان: برای پیدا کردن اطلاعاتی که تاریخشون بین دو تاریخ خاصی هست، از فیلترهای مخصوص تاریخ و زمان استفاده کن.

4️⃣ به تنبل بودن کوئری ست ها (lazy queryset)دقت کن:
کوئری ست ها تا زمانی که نیاز نباشه ارزیابی نمی‌شن این یعنی تا وقتی که بخوای تعداد محصولاتی که پیدا کردی رو چاپ کنی، کوئری ست به دیتابیس ارسال نمی‌شه.

5️⃣ از Aggregation استفاده کن:محاسبه مجموع، میانگین و ... برای محاسبه اینجور چیزها از متدهای Aggregation مثل ()count(), sum(), avg استفاده کن.

6️⃣ ایندکس‌ها رو فراموش نکن:
سرعت بخشیدن به جستجوها ایندکس مثل یه فهرست تلفنی برای دیتابیس هست. با ایجاد ایندکس روی فیلدهایی که زیاد روشون جستجو می‌کنی، سرعت جستجو رو خیلی زیاد می‌کنی.


🌡 مثال عملی

from myapp.models import Product

# گرفتن همه محصولات با قیمت کمتر از 100000 تومان و فقط نمایش نام و قیمت
products = Product.objects.filter(price__lte=100000).only('name', 'price')

# محاسبه تعداد محصولات در هر دسته
product_counts = Product.objects.values('category').annotate(count=Count('id'))


جمع بندی
بهینه سازی QuerySet ها مثل اینه که یه ماشین مسابقه رو تیونینگ کنی. با رعایت این نکات ساده، برنامه‌ت مثل برق کار می‌کنه و تو هم می‌تونی با خیال راحت به کارهای دیگه برسی.

نکته: همیشه سعی کن QuerySet ها رو مرحله به مرحله بنویسی و از ابزارهای دیباگ برای بررسی عملکردشون استفاده کنی.

#programing #django #queryset
🔥9👍1😁1