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

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

👥 ɢʀᴏᴜᴘ: https://t.iss.one/+td1EcO_YfSphNTlk
Download Telegram
🥷 کانال برنامه نویسی نینجا لرن | برای حرفه ای های وب و برنامه نویسان اینده 👨‍💻

🔥 چی منتظرته؟!
🛠️ ابزارها و تکنولوژی‌های کاربردی رو بشناس

🩺 نکات طلایی برنامه‌نویسی و مفاهیم کلیدی رو یاد بگیر

📬 تجربه‌های ناب و ترفندهای عملی رو کشف کن

🤝 با برنامه‌نویسان حرفه‌ای مثل خودت شبکه‌سازی کن


🌟 جامعه‌ای برای رشد و یادگیری 🌟
تو هم عضوی از نینجاهای وب شو 😉

دسته بندی کانال 📚

🎯 | Channel : @NinjaLearn
💬 | Group : @NinjaLearnGap
👍8
انواع دیتا تایپ ها در پایتون🐍
دیتا تایپ ها به نوع داده هایی که متغییر ها میتوانند نگه داری کنند میگن همچنین دیتا تایپ ها به مفسر یا کامپایلر میگن که چگونه با داده ها برخورد کنن

@ninja_learn_ir
👍5
این هم از دیتا تایپ های JavaScripts

@ninja_learn_ir
👍5
💣 بکگراند تسک در برنامه‌نویسی وب 💣

#پست_جدید

بکگراند تسک‌ها یا وظایف پس‌زمینه‌ای، عملیات‌هایی هستن که خارج از پراسس یا ترد اصلی اجرای برنامه (main thread) اجرا میشن.

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

چرا باید از بکگراند تسک‌ها استفاده کنیم؟

1- بهبود کارایی و پاسخ‌دهی:
اجرای عملیات‌های زمان‌بر (مثل پردازش داده‌ها، دانلود فایل‌های بزرگ، ارسال پیامک و ارسال ایمیل) در بکگراند، از قفل شدن (freezing) رابط کاربری جلوگیری می‌کنه و باعث میشه که برنامه به طور مداوم پاسخگو بمونه.

2- مدیریت بهتر منابع:
توزیع وظایف بین ترد ها و پراسس های مختلف و یا استفاده از سرویس‌های بکگراند، باعث میشه منابع سیستم بهتر مدیریت بشن و از افت کارایی جلوگیری میشه.

3- تجربه کاربری بهتر:
کاربرا انتظار دارن که برنامه‌ها به سرعت واکنش نشون بدن. اجرای وظایف سنگین در پس‌زمینه باعث میشه کاربرا تجربه‌ای روون‌ تر و بدون وقفه داشته باشن.


بکگراند تسک‌ها برای چه کارهایی مناسب هستند؟

1- ارسال ایمیل‌، پیامک و نوتیفیکیشن‌ها:
ارسال ایمیل‌ها و پیامک های تأیید، نوتیفیکیشن‌ها و سایر پیام‌های سیستم به صورت همزمان با عملیات اصلی کاربر ممکنه زمان‌بر باشه. این کارها می‌تونن به عنوان بکگراند تسک انجام بشن.

2- پردازش فایل‌های بزرگ:
پردازش فایل‌های بزرگ مثل آپلود، دانلود و تبدیل فرمت فایل‌ها می‌تونه در بکگراند انجام بشه تا برنامه به کاربرا پاسخگو بمونه.

3- به‌روزرسانی‌های دسته‌ای:
به‌روزرسانی‌های انبوه داده‌ها در پایگاه داده، محاسبات پیچیده و تحلیل داده‌ها می‌تونه در بکگراند انجام بشه تا عملکرد برنامه تحت تأثیر قرار نگیره.

4- جمع‌آوری و تجزیه و تحلیل داده‌ها:
وظایف جمع‌آوری داده‌ها از منابع مختلف و تحلیل‌های پیچیده می‌تونن به صورت دوره‌ای در پس‌زمینه انجام بشن.


نحوه استفاده از بکگراند تسک‌ها

1- استفاده از Job Queues:
صف‌های کار (job queues) مثل Redis Queue، RabbitMQ، و Amazon SQS به شما اجازه می‌دن کارهای پس‌زمینه‌ای تون رو مدیریت و اجرا کنید.

2- وب ورکر ها در مرورگر ها:
وب ورکر ها (Web Workers) به شما اجازه می‌دن اسکریپت‌های جاوااسکریپت رو در پس‌زمینه اجرا کنید، بدون اینکه جریان اصلی برنامه تحت تأثیر قرار بگیره.

3- Task Scheduling:
ابزارها و فریم‌ورک‌هایی مثل Celery برای Python و Sidekiq برای Ruby به شما اجازه می‌دن وظایف زمان‌بندی شده رو به صورت پس‌زمینه‌ای اجرا کنید.



نمونه کد ساده با استفاده از Celery در Python:


# tasks.py

from celery import Celery

app = Celery('tasks', broker='pyamqp://guest@localhost//')

@app.task
def send_email(recipient):
# Logic for sending email
print(f'Sending email to {recipient}')


# main.py

from tasks import send_email

# Trigger the background task
send_email.delay('[email protected]')


#پست_جدید #جنگو #پایتون #بکگراند_تسک
@ninja_learn_ir
👍9
#پست_جدید
میخوام درمورد یک موضوع خیلی جالب توی جنگو صحبت کنم که اکثرا توش مشکل دارن
خب اون چیه؟


🤓 کش شدن نتیجه کوری ها❗️


میدونستید که جنگو نتیجه کوری هارو کش میکنه؟

حالا این یعنی چی ⁉️

یعنی جنگو فقط یک بار دیتابیس رو هیت میکنه و دیتا رو میگیره و همونو کش میکنه و از دفعه های بعدی تا زمان پایان اجرای تابع فعلی از اون نتیجه کش شده استفاده میکنه

حالا بیاید توضیح بدم.

⭕️ قبلش یه نکته مهم رو بگم: ⭕️
هر چیزی که باعث ایجاد یک QuerySet جدید بشه باعث هیت شدن جدید به دیتابیس خواهد شد.

حالا بریم مثالو ببینیم:

users = User.objects.all()
print(users)

if users:
for u in users:
print(u)


خب تو این کد بنظرتون چند بار دیتابیس توسط جنگو هیت وصدا زده میشه میشه؟

حتما فکرمیکنید ۳ بار نه اینجوری نیست ❗️

اینجا فقط 2 بار داره به دیتابیس هیت میزنه.

1️⃣ توی خط اول ما فقط queryset رو تعریف کردیم. از اونجایی که میدونید کوری ست ها توی جنگو lazy هستن و تا وقتی که صداشون نزنیم اجرا نمیشن.

2️⃣ توی خط دوم ما queryset رو print کردیم و اولین هیتمون به دیتابیس زده میشه ولی یه نکته print نمیره کل رکورد هارو بیاره چون منطقی نیست.

پرینت یک محدودیت داره برای آوردن رکورد ها مثلا اگه شما هزار تا رکورد داشته باشید print کل اون هزار تا رو نمیاره و مثلا ۱۰۰ تاشو میاره دومین نکته اینه که اینجا هیچ کشی اتفاق نمی افته( دلیلشو جلوتر میگم)

3️⃣ توی خط سوم ما میخوایم با if بررسی کنیم کاربری وجود داره یا نه اینجا جنگو میاد کش ر و چک میکنه تا ببینه برای users ریزالتی کش شده یانه

اینجا میبینه هیچ کشی وجود نداره و در نتیجه اینجا دومین هیتمون به دیتابیس میخوره و کل رکورد هارو برمیگردونه و مثل print عمل نمیکنه و نکته بعدی اینه اینجا ریزالت کوری توی رم سرور توسط جنگو کش میشه حالا اینجا جالب میشه😁

توی خط بعدی که یه حلقه زدیم روی users اینجا میاد کش رو چک میکنه و میبینه که ریزالت users کش شده و میاد از اون کش استفاده میکنه و به دیتابیس هیچ کوری نمیزنه و درنتیجه اینجا فقط دوبار به دیتابیس هیت خورده میشه

حالا چرا print نتیجش کش نشد؟

به گفته خود جنگو، جنگو فقط زمانی ریزالت یه queryset رو کش میکنه که اون queryset کامل اجرا بشه. و توی print چون queryset کامل اجرا نمیشه منطقا ریزالتش کش نمیشه
ولی توی if چون queryset کامل اجرا شد ریزالتشم کش شد


برای اثبات این حرفم میتونید چیزایی که کش شده رو ببینید 👇

users = User.objects.all()
print(users)
print("Cache: ", users._result_cache)

if users:
print("Cache: ", users._result_cache)
for u in users:
print(u)



خروجی این کد هم این خواهد بود:

<QuerySet [<User: mohammad>]>
Cache: None
Cache: [<User: mohammad>]
mohammad

همونطور که میبینید بعد از اجرا شدن print هیچ ریزالتی کش نشده و کش خالیه چون queryset کامل اجرا نشد.

ولی وقتی if اجرا شد چون queryset کامل اجرا شد ریزالتم کش شد و ازاین به بعد از کش استفاده میکنه.

یه نکته در پایان بگم این کش تا زمانی باقی میمونه که اجرای تابع تموم شه و بعد ازاون توسط garbage collector از مموری سرور پاک میشه جنگو توسط پایتون و پایتون روی سرور اجرا میشه.

توی پستای بعدی درمورد garbage collector بیشتر توضیح میدم

#جنگو #کش_در_جنگو #برنامه_نویسی

@ninja_learn_ir
👍82