آیا Node.js یک single-threaded محسوب میشه؟ 🤟
در پست قبل به بررسی اینکه رشته یا thread چی هست پرداختیم، اما در این پست راجب این که رشته ها در Node.js به چه صورت هستن، صحبت میکنیم.
البته قبل از اینکه بدونیم Node.js تک رشته ای هست یا نه، ابتدا باید مفهوم single-threaded و multi-threaded ها رو متوجه بشیم.
single-threaded: اگه شما یک رستوران و یک گارسون داشته باشید، اون گارسون میتونه هربار فقط یک سفارش بگیره، یک غذا رو آماده کنه و به یک مشتری سرویس بده.
multi-threaded: حالا اگه همون رستوران چندتا گارسون داشته باشه، میتونه به صورت مستقل سفارش بیشتری بگیره و خدمات بیشتری ارائه بده.
اما Node.js واقعا تک رشته ای هست؟🤔
Node.js بخاطر معماری non-blocking و ایونت محور، اغلب باعث این تصور غلط میشه که ذاتا تک رشته ای هست، ولی خب یک نکته ریزه داره که برای درکش، ابتدا باید با ایونت لوپ ها آشنا بشید⬇️
در قلب Node.js، ایونت لوپ قرار داره و مکانیزمی هست که کالبک ها رو به صورت non-blocking، مدیریت و اجرا میکنه.این تک رشته به صورت مداوم ایونت هایی مثل درخواست های دریافتی، عملیات های I/O تکمیل شده یا منقضی شدن زمان رو بررسی میکنه، و هنگامی که یک ایونت شناسایی شد کالبک فانکشن های مربوطه رو در صف اجرا قرار میده، سپس ایونت لوپ این تماس هارو به ترتیب دریافت، و پردازش میکنه.
برای اینکه پست زیادی طولانی نشه، ادامه توضیحات رو داخل این تلگراف قرار دادیم، پیشنهاد میکنم از دست ندید :))
#nodejs #thread
@CodeModule
در پست قبل به بررسی اینکه رشته یا thread چی هست پرداختیم، اما در این پست راجب این که رشته ها در Node.js به چه صورت هستن، صحبت میکنیم.
البته قبل از اینکه بدونیم Node.js تک رشته ای هست یا نه، ابتدا باید مفهوم single-threaded و multi-threaded ها رو متوجه بشیم.
single-threaded: اگه شما یک رستوران و یک گارسون داشته باشید، اون گارسون میتونه هربار فقط یک سفارش بگیره، یک غذا رو آماده کنه و به یک مشتری سرویس بده.
multi-threaded: حالا اگه همون رستوران چندتا گارسون داشته باشه، میتونه به صورت مستقل سفارش بیشتری بگیره و خدمات بیشتری ارائه بده.
این توضیح ساده ای از هرکدوم بود، پیشنهاد میکنم این مقاله رو برای اطلاعات بیشتر بخونین :)
اما Node.js واقعا تک رشته ای هست؟
Node.js بخاطر معماری non-blocking و ایونت محور، اغلب باعث این تصور غلط میشه که ذاتا تک رشته ای هست، ولی خب یک نکته ریزه داره که برای درکش، ابتدا باید با ایونت لوپ ها آشنا بشید
در قلب Node.js، ایونت لوپ قرار داره و مکانیزمی هست که کالبک ها رو به صورت non-blocking، مدیریت و اجرا میکنه.این تک رشته به صورت مداوم ایونت هایی مثل درخواست های دریافتی، عملیات های I/O تکمیل شده یا منقضی شدن زمان رو بررسی میکنه، و هنگامی که یک ایونت شناسایی شد کالبک فانکشن های مربوطه رو در صف اجرا قرار میده، سپس ایونت لوپ این تماس هارو به ترتیب دریافت، و پردازش میکنه.
برای اینکه پست زیادی طولانی نشه، ادامه توضیحات رو داخل این تلگراف قرار دادیم، پیشنهاد میکنم از دست ندید :))
#nodejs #thread
@CodeModule
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7😁4⚡2
تایپ های void و never، شاید در ظاهر شباهتهای زیادی به هم داشته باشن، اما کاربرد کاملاً متفاوتی دارن که در این پست با هم بررسیشون میکنیم
اگه تابعی داریم که هیچ چیزی ریترن نمیکنه، برای نوع خروجی اون از تایپ void استفاده میکنیم. به عبارت دیگه، وقتی تابعی رو میبینیم که خروجی اون void هست، به این معنیه که اون تابع چیزی رو ریترن نمیکنه. مثل کد زیر :
function logMessage(message: string): void {
console.log(message);
}
بعضی توابع ممکنه اصلاً به مرحلهٔ ریترن کردن هم نرسن. برای مثال به یک Error برخورد کنید و اصلا چیزی ریترن نشه. مثل کد زیر :
function throwError(message: string): never {
throw new Error(message);
}
در مجموع، تفاوت اصلی بین این دو تایپ اینه که void عملکردی رو نشون میده که هیچ مقداری رو بر نمیگردونه، در حالی که never توصیف یک عملکردیه که هیچگاه به پایان نمیرسه
#typescript #type #different
@CodeModule
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8😁3👌3💔1
نکاتی جهت مبارزه با ناامیدی در برنامه نویسی ❗️
ناامیدی در زمان یادگیری برنامه نویسی ممکنه به دلایل مختلفی ایجاد بشه، از جمله پیچیدگی مفاهیم برنامه نویسی، مشکلات فنی، استعداد طبیعی نداشتن در این حوزه و مقایسه خود با دیگران و احساس عقب موندگی. اما مهمترین نکته در مبارزه با ناامیدی اینه که به خودتون زمان و فرصت بدید، تا مهارتهای لازم رو به طور مداوم تقویت، و تجربه کسب کنید.
1⃣ تعیین اهداف مقدماتی
هدفگذاری و تعیین اهداف مقدماتی کمک میکنه تا به تدریج پیشرفت خودتون رو ببینید و احساس رضایت داشته باشید. هدفها باید قابل دستیابی و محدود به چالشهای کوچیک باشن تا تحقق اونها ممکن باشه.
2⃣ استفاده از منابع آموزشی مناسب
منابع آموزشی متنوعی برای یادگیری برنامه نویسی از جمله آموزشگاهها، ویدئوهای آموزشی و ... وجود داره. بررسی و استفاده از منابعی که برای شما مناسبه و روشهای یادگیریتون رو تقویت میکنه، میتونه احساس اطمینان بیشتری بهتون بده و روند پیشرفتتون رو سریع تر کنه.
3⃣ مشارکت در جامعه برنامه نویسی
شرکت در جامعه برنامه نویسی و ارتباط با سایر دولوپرها، میتونه انگیزه و الهام شما رو افزایش بده. با پرسیدن سوالات، به اشتراک گذاری تجربیات و مشارکت در گفتگوها، میتونید از دانش دیگران بهرهمند بشید.
4⃣ مراقبت از بهداشت روانی و جسمی
نگهداشتن سلامت جسمی و روانی شما خیلی مهمه. وقتی که درگیر یادگیری هستید، به خودتون استراحت کافی بدید و از فعالیتهایی مانند ورزش، مدیتیشن یا تمرینات تنفسی برای کاهش استرس و افزایش انرژی استفاده کنید. برای مثال جمعه ها به خودتون استراحت بدید و کمی از کد فاصله بگیرید.
5⃣ ایجاد یک برنامهریزی منظم
برنامهریزی منظم و آگاهانه میتونه بهتون کمک کنه تا به تعهد خود در یادگیری برنامه نویسی پایبند باشید. برنامهریزی زمانی مناسب برای مطالعه و تمرین، تعیین اولویتها و تقسیم وقت برای موضوعات مختلف رو شامل میشه.
6⃣ تلاش برای حل مسائل و باگ ها
یادگیری برنامه نویسی به معنای حل مسائل و باگ ها هست. اگه با یک مشکل مواجه شدید و نتونستید اون رو حل کنید، ناامید نشید. تلاش کنید تا مسئله رو از طریق راهکارهای مختلف مورد بررسی قرار بدید، با دیگران در مورد اون صحبت کنید و از منابع مختلف استفاده کنید. این تلاشها به شما کمک میکنه تا مهارتهای خودتون رو تقویت کنید و بهترین راه حل رو پیدا کنید.
7⃣ استفاده از تجارب دیگران
مطالعه و سرمشق گرفتن از تجربههای سایر دولوپر ها، میتونه به شما خیلی کمک کنه. مطالعه مقالات، کتابها و وبلاگهای مرتبط، گفتگوها و مصاحبههای برنامه نویسان حرفهای، بهتون کمک میکنه تا ایدهها و روشهای جدیدی برای پیشرفت خودتون پیدا کنید.
و مورد آخر، اگه الان در این برهه زمانی (ناامیدی) هستید و فکر و خیال داره اذیتتون میکنه، دوست داشتید میتونیم راجب این موضوع با هم گپ و گفتی داشته باشیم🩶
#tips #programming
@CodeModule
ناامیدی در زمان یادگیری برنامه نویسی ممکنه به دلایل مختلفی ایجاد بشه، از جمله پیچیدگی مفاهیم برنامه نویسی، مشکلات فنی، استعداد طبیعی نداشتن در این حوزه و مقایسه خود با دیگران و احساس عقب موندگی. اما مهمترین نکته در مبارزه با ناامیدی اینه که به خودتون زمان و فرصت بدید، تا مهارتهای لازم رو به طور مداوم تقویت، و تجربه کسب کنید.
هدفگذاری و تعیین اهداف مقدماتی کمک میکنه تا به تدریج پیشرفت خودتون رو ببینید و احساس رضایت داشته باشید. هدفها باید قابل دستیابی و محدود به چالشهای کوچیک باشن تا تحقق اونها ممکن باشه.
منابع آموزشی متنوعی برای یادگیری برنامه نویسی از جمله آموزشگاهها، ویدئوهای آموزشی و ... وجود داره. بررسی و استفاده از منابعی که برای شما مناسبه و روشهای یادگیریتون رو تقویت میکنه، میتونه احساس اطمینان بیشتری بهتون بده و روند پیشرفتتون رو سریع تر کنه.
شرکت در جامعه برنامه نویسی و ارتباط با سایر دولوپرها، میتونه انگیزه و الهام شما رو افزایش بده. با پرسیدن سوالات، به اشتراک گذاری تجربیات و مشارکت در گفتگوها، میتونید از دانش دیگران بهرهمند بشید.
نگهداشتن سلامت جسمی و روانی شما خیلی مهمه. وقتی که درگیر یادگیری هستید، به خودتون استراحت کافی بدید و از فعالیتهایی مانند ورزش، مدیتیشن یا تمرینات تنفسی برای کاهش استرس و افزایش انرژی استفاده کنید. برای مثال جمعه ها به خودتون استراحت بدید و کمی از کد فاصله بگیرید.
برنامهریزی منظم و آگاهانه میتونه بهتون کمک کنه تا به تعهد خود در یادگیری برنامه نویسی پایبند باشید. برنامهریزی زمانی مناسب برای مطالعه و تمرین، تعیین اولویتها و تقسیم وقت برای موضوعات مختلف رو شامل میشه.
یادگیری برنامه نویسی به معنای حل مسائل و باگ ها هست. اگه با یک مشکل مواجه شدید و نتونستید اون رو حل کنید، ناامید نشید. تلاش کنید تا مسئله رو از طریق راهکارهای مختلف مورد بررسی قرار بدید، با دیگران در مورد اون صحبت کنید و از منابع مختلف استفاده کنید. این تلاشها به شما کمک میکنه تا مهارتهای خودتون رو تقویت کنید و بهترین راه حل رو پیدا کنید.
مطالعه و سرمشق گرفتن از تجربههای سایر دولوپر ها، میتونه به شما خیلی کمک کنه. مطالعه مقالات، کتابها و وبلاگهای مرتبط، گفتگوها و مصاحبههای برنامه نویسان حرفهای، بهتون کمک میکنه تا ایدهها و روشهای جدیدی برای پیشرفت خودتون پیدا کنید.
و مورد آخر، اگه الان در این برهه زمانی (ناامیدی) هستید و فکر و خیال داره اذیتتون میکنه، دوست داشتید میتونیم راجب این موضوع با هم گپ و گفتی داشته باشیم
#tips #programming
@CodeModule
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13⚡3😁3
Ember.js یک فریمورک جاوااسکریپتی اوپن سورس و قدرتمند، برای توسعه وباپلیکیشنهای SPA هست. این فریمورک از الگوی طراحی MVC (Model-View-Controller) استفاده میکنه و ابزارها و الگوهای اساسی برای ساخت وباپلیکیشنهای پیچیده رو فراهم میکنه.
مزایای استفاده از Ember.js
معایب استفاده از Ember.js
و در نهایت Ember.js، یک فریمورک قدرتمند و پرکاربرد برای توسعه وباپلیکیشنهای SPA هست که با امکاناتی مثل کارایی بالا و راهاندازی سریع، خودش رو به یک گزینه عالی برای توسعه پروژههای بزرگ و پیچیده تبدیل میکنه. برای اطلاعات بیشتر، میتونید به داکیومنتش مراجعه کنید
Document
#framework #emberjs
@CodeModule
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7⚡5😁3
همه چیز راجب thread-pool ها🔥
thread-pool ها مجموعه ای از رشته های کارگر (worker thread) هستن. اونها توسط یک زمانبندی مرکزی مديريت و وظایف (task) رو به pool ارسال میکنن و زمانبندی، اون هارو بین رشته های موجود برای اجرا توزیع میکنه. این مکانیزم امکان برنامه ریزی کارآمد و استفاده از منابع رو فراهم میکنه.
مزایای استفاده از thread-pool⬇️
کاهش overhead : ساخت و از بین بردن رشته ها میتونه پرهزینه باشه. thread-pool با استفاده مجدد از رشته ها، باعث میشه overhead کاهش پیدا کنه.
بهبود عملکرد : thread-pool ها میتونن با توزیع وظایف بین چندین رشته، عملکرد برنامه رو بهبود ببخشند.
سادگی استفاده : thread-pool با استفاده از concurrency، برنامه ها رو ساده تر میکنه.
برای درک بهتر به مثال زیر توجه کنید⬇️
اگه بخوایم از thread-pool استفاده نکنیم، هربار که این تابع رو فراخوانی میکنیم یک رشته جدید ساخته میشه، که منجر به overhead بالا و عملکرد ضعیف میشه. اما با استفاده از thread-pool رشته ها میتونن مجددا استفاده بشن و وظایف بین اونها، توزیع میشه. این امر منجر به overhead پایینتر و عملکرد بهتر میشه.
برای اینکه پست زیادی طولانی نشه، سایر مثال و نکات، و همچنین نحوه استفاده از thread-pool در پروژه واقعی رو در تلگراف قرار دادیم :))
#nodejs #thread #thread_pool
@CodeModule
thread-pool ها مجموعه ای از رشته های کارگر (worker thread) هستن. اونها توسط یک زمانبندی مرکزی مديريت و وظایف (task) رو به pool ارسال میکنن و زمانبندی، اون هارو بین رشته های موجود برای اجرا توزیع میکنه. این مکانیزم امکان برنامه ریزی کارآمد و استفاده از منابع رو فراهم میکنه.
مزایای استفاده از thread-pool
کاهش overhead : ساخت و از بین بردن رشته ها میتونه پرهزینه باشه. thread-pool با استفاده مجدد از رشته ها، باعث میشه overhead کاهش پیدا کنه.
بهبود عملکرد : thread-pool ها میتونن با توزیع وظایف بین چندین رشته، عملکرد برنامه رو بهبود ببخشند.
سادگی استفاده : thread-pool با استفاده از concurrency، برنامه ها رو ساده تر میکنه.
برای درک بهتر به مثال زیر توجه کنید
const crypto = require('crypto')
const start = Date.now()
crypto.pbkdf2('a','b',10000,512,'sha512',()=>{
console.log('1:',Date.now() - start);
})
crypto.pbkdf2('a','b',10000,512,'sha512',()=>{
console.log('2:',Date.now()- start);
})
crypto.pbkdf2('a','b',10000,512,'sha512',()=>{
console.log('3:',Date.now()- start);
})
crypto.pbkdf2('a','b',10000,512,'sha512',()=>{
console.log('4:',Date.now()- start);
})
crypto.pbkdf2('a','b',10000,512,'sha512',()=>{
console.log('5:',Date.now()- start);
})
تابع PBKDF2 اکثرا برای رمزنگاری رشته ها استفاده میشه.
اگه بخوایم از thread-pool استفاده نکنیم، هربار که این تابع رو فراخوانی میکنیم یک رشته جدید ساخته میشه، که منجر به overhead بالا و عملکرد ضعیف میشه. اما با استفاده از thread-pool رشته ها میتونن مجددا استفاده بشن و وظایف بین اونها، توزیع میشه. این امر منجر به overhead پایینتر و عملکرد بهتر میشه.
برای اینکه پست زیادی طولانی نشه، سایر مثال و نکات، و همچنین نحوه استفاده از thread-pool در پروژه واقعی رو در تلگراف قرار دادیم :))
#nodejs #thread #thread_pool
@CodeModule
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡7🔥5😁3
خروجی کد بالا؟ 🤔
Anonymous Quiz
15%
xyz
22%
Null
41%
Undefined
22%
نمیدونم، رو آیکون لامپ کلیک میکنم تا متوجه بشم💡
⚡8🔥5😁3
با غول دنیای ابری آشنا بشید 🔥
AWS که مخفف Amazon Web Services هست، یک پلتفرم ابری توسعه یافته شرکت آمازونه. AWS با مدل قیمتی "pay-as-you-go" به شما این امکان رو میده که فقط به اندازه منابعی که استفاده میکنید هزینه پرداخت کنید، و اساساً AWS یک زیرساخت مجازی رو فراهم میکنه که نیاز های سرور فیزیکی و مديريت پیچیده IT رو از بین میبره.
برخی از کاربردهای AWS⬇️
🔵 امنیت: AWS اقدامات امنیتی قویای برای محافظت از داده ها و برنامه ها خود، ارائه میده.
🔵 نوآوری و انعطافپذیری: AWS دارای مجموعه خدماتیه که دائماً در حال تکامل هستن و این امکان رو میده، که راهحلهای نوآورانه رو کشف کنید و با نیازهای در حال تغییر، سازگار بشید.
🔵 خدمات گسترده: از توان محاسباتی و ذخیره سازی گرفته، تا ماشین لرنینگ و دیتابیس، AWS برای نیازهای محاسبات ابری شما یک فروشگاه ایده آل هست.
🔵 هزینه های بهینه: همونطور که گفتم با استفاده از مدل قیمتی "pay-as-you-go"، میتونید هزینه های خودتون رو به صورت کامل کنترل کنید.
علاوه بر تمام این مزایا، AWS در مقایسه با رقبای خودش همچون Azure، خدمات بیشتر و با کیفیت تری ارائه میده و به همین دلیل، سهم بیشتری از بازار جهانی رو به خودش اختصاص داده.
به صورت کلی AWS یک پلتفرم قدرتمند، ایده آل و همه کاره برای ساخت، استقرار و مدیریت برنامه ها در فضای ابری هست. برای اطلاعات بیشتر میتونید به سایتش مراجعه کنید.
#aws
@CodeModule
AWS که مخفف Amazon Web Services هست، یک پلتفرم ابری توسعه یافته شرکت آمازونه. AWS با مدل قیمتی "pay-as-you-go" به شما این امکان رو میده که فقط به اندازه منابعی که استفاده میکنید هزینه پرداخت کنید، و اساساً AWS یک زیرساخت مجازی رو فراهم میکنه که نیاز های سرور فیزیکی و مديريت پیچیده IT رو از بین میبره.
برخی از کاربردهای AWS
علاوه بر تمام این مزایا، AWS در مقایسه با رقبای خودش همچون Azure، خدمات بیشتر و با کیفیت تری ارائه میده و به همین دلیل، سهم بیشتری از بازار جهانی رو به خودش اختصاص داده.
به صورت کلی AWS یک پلتفرم قدرتمند، ایده آل و همه کاره برای ساخت، استقرار و مدیریت برنامه ها در فضای ابری هست. برای اطلاعات بیشتر میتونید به سایتش مراجعه کنید.
#aws
@CodeModule
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡9🔥5😁4
با Prisma بیشتر آشنا بشید 👩💻
در دنیای توسعه نرمافزار، انتخاب ابزارها و تکنولوژیهای مناسب میتونه تفاوت بزرگی در کیفیت و سرعت پروژههامون ایجاد کنه، و یکی از این ابزارهای نوین که به سرعت در حال محبوب شدنه، Prisma هست. Prisma به عنوان یک ابزار اوپن سورس، به دولوپر ها کمک میکنه تا به طور موثر با دیتابیس ها تعامل داشته باشن، و اپلیکیشن های کاربردی و مقیاس پذیر بسازن.
برای مثال Prisma به دولوپر ها این امکان رو میده، تا مدلهای دادهای رو با استفاده از یک زبان اختصاصی به نام Prisma Schema تعریف کنن، این مدلها به طور خودکار به جداول دیتابیس تبدیل میشن.
برخی از ویژگی های Prisma⬇️
🔵 رابط کاربری ساده و قدرتمند: Prisma یک واسط کاربری مدرن و قابل فهم برای کار با دیتابیس فراهم میکنه، که میتونه پیچیدگیهای مدیریت دادهها رو کاهش بده.
🔵 پشتیبانی از انواع پایگاههای داده: Prisma از پایگاههای داده مختلفی مانندPostgreSQL ، MySQL، SQLite و SQL Server پشتیبانی میکنه، که این امر انعطافپذیری زیادی به دولوپر ها میده.
🔵 تولید خودکار کد: با استفاده از Prisma میشه کدهای مربوط به عملیات پایگاه داده رو به صورت خودکار تولید کرد، که این امر باعث کاهش خطاهای انسانی و افزایش سرعت توسعه میشه.
🔵 یکپارچگی با GraphQL: این ORM قدرتمند به خوبی با GraphQL یکپارچه میشه، که این ویژگی به دولوپر ها کمک میکنه تا به راحتی APIهای پیچیده رو مدیریت و پیادهسازی کنن.
به صورت کلی Prisma به عنوان یک ابزار مدیریت دیتابیس، نیازهای مدرن دولوپر ها رو به خوبی میتونه جواب بده. استفاده از Prisma میتونه باعث افزایش بهرهوری، کاهش خطاها و تسریع فرآیند توسعه نرمافزار بشه. در صورت تمایل برای کسب اطلاعات بیشتر، به داکیومنتش سر بزنید.
#prisma
@CodeModule
در دنیای توسعه نرمافزار، انتخاب ابزارها و تکنولوژیهای مناسب میتونه تفاوت بزرگی در کیفیت و سرعت پروژههامون ایجاد کنه، و یکی از این ابزارهای نوین که به سرعت در حال محبوب شدنه، Prisma هست. Prisma به عنوان یک ابزار اوپن سورس، به دولوپر ها کمک میکنه تا به طور موثر با دیتابیس ها تعامل داشته باشن، و اپلیکیشن های کاربردی و مقیاس پذیر بسازن.
برای مثال Prisma به دولوپر ها این امکان رو میده، تا مدلهای دادهای رو با استفاده از یک زبان اختصاصی به نام Prisma Schema تعریف کنن، این مدلها به طور خودکار به جداول دیتابیس تبدیل میشن.
برخی از ویژگی های Prisma
به صورت کلی Prisma به عنوان یک ابزار مدیریت دیتابیس، نیازهای مدرن دولوپر ها رو به خوبی میتونه جواب بده. استفاده از Prisma میتونه باعث افزایش بهرهوری، کاهش خطاها و تسریع فرآیند توسعه نرمافزار بشه. در صورت تمایل برای کسب اطلاعات بیشتر، به داکیومنتش سر بزنید.
#prisma
@CodeModule
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡6🔥4😁3
اگه برای تمرین و کدنویسی دنبال ui خاصی میگردید، این طرح فیگما رو به هیچ وجه از دست ندید 💀
🔵 Link
#figma
@CodeModule
#figma
@CodeModule
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14❤🔥3⚡3😁3💔2
با الگوی راکتور در Node.js آشنا بشید🤟
Node.js در حوزه معماری ایونت محور، به دلیل توانایی بالای خود در مدیریت تعداد زیادی از اتصالات همزمان متمایزه، که این مهارت از فلسفه طراحی زیربناییش سرچشمه میگیره و به شدت بر الگوی راکتور متکی هست.
الگوی راکتور دقیقا چیه؟🤔
Reactor Pattern ایده ای برای انجام عملیاتهای I/O در Node.js هست. این الگو یک کنترل کننده (در مورد Node.js، یک کالبک فانکشن) ارائه میده، که با هر عملیات I/O مرتبطه، و هنگامی که یک درخواست I/O ساخته میشه، به یک Demultiplexer ارسال میشه.
از الگوی راکتور چه زمانی استفاده میشه؟
در blocking سنتی I/O، زمانی که برنامه یک درخواست I/O (مثله خوندن یک فایل یا برقراری تماس) میده، اجرای برنامه تا زمانی که عملیات کامل بشه متوقف میشه، که این بسیار ناکارآمده، اما Node.js برای مدیریت کارآمده حجم بالایی از اتصالات همزمان از الگوی راکتور استفاده میکنه، که اساساً مربوط به مدیریت ناهمزمان عملیات I/O (ورودی/خروجی) هست.
Reactor Pattern چجوری کار میکنه؟
1️⃣ Event Demultiplexer: این قلب الگو هست که مسئول نظارت بر چندین منبع I/O (سوکت های شبکه، سیستم فایل ها و... ) هست، و هنگامی که به یک درخواست I/O جدید میرسه، Demultiplexer اون رو به عنوان یک ایونت ثبت میکنه و به یک صف رویداد اضافه میکنه.
2️⃣ صف رویداد(Event Queue): این ساختار داده، تمام ایونت های I/O معلق رو به ترتیبی که دریافت کردن، نگه داره میکنه و هر ایونت دارای داده های مرتبط، و یک کالبک فانکشن (handler) هست که باید پس از اتمام عملیات I/O اجرا بشه.
3️⃣ ایونت لوپ (Event Loop) : این یک حلقه بی نهایت هست، که به طور مداوم صف ایونت رو نظارت میکنه و از طریق صف، تکرار میشه و ایونت بعدی رو بازیابی میکنه و کالبک فانکشن مرتبط با ایونت رو فراخوانی میکنه.
اما جریان ایونت ها به چه صورته؟🤔
1. Application Triggers I/O: زمانی برنامه Node.js شما یک عملیات I/O رو شروع کنه، مثل خوندن یک فایل یا درخواست HTTP.
2. Demultiplexer شارژ میشه: Demultiplexer درخواست I/O رو قطع میکنه و یک ایونت میسازه و همچنین این ایونت رو در صف ایونت ذخیره می کنه.
3. ایونت لوپ در عمل: ایونت لوپ به طور مداوم صف ایونت رو بررسی میکنه، و هنگامی که عملیات I/O یک ایونت کامل میشه (به عنوان مثال، داده از یک تماس شبکه دریافت میشه) و ایونت مربوطه از صف بازیابی میشه.
4. عملکرد کالبک فانکشن : ایونت لوپ عملکرد کالبک فانکشن مرتبط با ایونت بازیابی شده رو فعال میکنه. این تابع فراخوانی داده های دریافتی رو پردازش میکنه یا عملیات تکمیل شده رو مدیریت میکنه.
5. برگشتن به برنامه: هنگامی که تابع callback کار خودش رو تموم میکنه، برنامه میتونه بدون بلاک شدن توسط عملیات I/O به اجرای خودش ادامه بده.
به صورت کلی الگوی Reactor، پایه و اساس مدل برنامه نویسی ناهمزمان(asynchronous) در Node.js هست. و امکان مدیریت کارآمد عملیات I/O رو فراهم میکنه، که منجر به ساخت برنامه های کاربردی بسیار مقیاس پذیر و پاسخگو میشه. با درک این الگو، میتونیم از قدرت واقعی Node.js برای ساخت برنامه های real-time و ایونت محور استفاده کنیم.
ممکنه در نگاه اول فهمیدن این موضوع سخت باشه، برای همین این مقالات رو پیشنهاد میکنم بخونید :))
🔵 Article
🔵 Article
🔵 Article
#nodejs #reactor
@CodeModule
Node.js در حوزه معماری ایونت محور، به دلیل توانایی بالای خود در مدیریت تعداد زیادی از اتصالات همزمان متمایزه، که این مهارت از فلسفه طراحی زیربناییش سرچشمه میگیره و به شدت بر الگوی راکتور متکی هست.
الگوی راکتور دقیقا چیه؟
Reactor Pattern ایده ای برای انجام عملیاتهای I/O در Node.js هست. این الگو یک کنترل کننده (در مورد Node.js، یک کالبک فانکشن) ارائه میده، که با هر عملیات I/O مرتبطه، و هنگامی که یک درخواست I/O ساخته میشه، به یک Demultiplexer ارسال میشه.
از الگوی راکتور چه زمانی استفاده میشه؟
در blocking سنتی I/O، زمانی که برنامه یک درخواست I/O (مثله خوندن یک فایل یا برقراری تماس) میده، اجرای برنامه تا زمانی که عملیات کامل بشه متوقف میشه، که این بسیار ناکارآمده، اما Node.js برای مدیریت کارآمده حجم بالایی از اتصالات همزمان از الگوی راکتور استفاده میکنه، که اساساً مربوط به مدیریت ناهمزمان عملیات I/O (ورودی/خروجی) هست.
Reactor Pattern چجوری کار میکنه؟
اما جریان ایونت ها به چه صورته؟
1. Application Triggers I/O: زمانی برنامه Node.js شما یک عملیات I/O رو شروع کنه، مثل خوندن یک فایل یا درخواست HTTP.
2. Demultiplexer شارژ میشه: Demultiplexer درخواست I/O رو قطع میکنه و یک ایونت میسازه و همچنین این ایونت رو در صف ایونت ذخیره می کنه.
3. ایونت لوپ در عمل: ایونت لوپ به طور مداوم صف ایونت رو بررسی میکنه، و هنگامی که عملیات I/O یک ایونت کامل میشه (به عنوان مثال، داده از یک تماس شبکه دریافت میشه) و ایونت مربوطه از صف بازیابی میشه.
4. عملکرد کالبک فانکشن : ایونت لوپ عملکرد کالبک فانکشن مرتبط با ایونت بازیابی شده رو فعال میکنه. این تابع فراخوانی داده های دریافتی رو پردازش میکنه یا عملیات تکمیل شده رو مدیریت میکنه.
5. برگشتن به برنامه: هنگامی که تابع callback کار خودش رو تموم میکنه، برنامه میتونه بدون بلاک شدن توسط عملیات I/O به اجرای خودش ادامه بده.
به صورت کلی الگوی Reactor، پایه و اساس مدل برنامه نویسی ناهمزمان(asynchronous) در Node.js هست. و امکان مدیریت کارآمد عملیات I/O رو فراهم میکنه، که منجر به ساخت برنامه های کاربردی بسیار مقیاس پذیر و پاسخگو میشه. با درک این الگو، میتونیم از قدرت واقعی Node.js برای ساخت برنامه های real-time و ایونت محور استفاده کنیم.
ممکنه در نگاه اول فهمیدن این موضوع سخت باشه، برای همین این مقالات رو پیشنهاد میکنم بخونید :))
#nodejs #reactor
@CodeModule
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5⚡4😁3
پیاده سازی قابلیت drag&drop در سه سوت
react-dnd یکی از کتابخانههای محبوب برای پیادهسازی قابلیت درگ و دراپ (drag and drop) در پروژه های ریکتی هست. این کتابخانه توسط Dan Abramov توسعه داده شده و بر اساس استانداردهای HTML5 و API درگ و دراپ طراحی شده است.
ویژگیهای کلیدی react-dnd⬇️
🔵 انعطاف پذیری بالا: react-dnd به شما این امکان رو میده تا انواع مختلفی از تعاملات درگ و دراپ رو پیادهسازی کنید، از جابجایی آیتمهای لیست گرفته تا قابلیتهای پیچیدهتر مانند ساختارهای درختی و جابجایی بین لیستهای مختلف.
🔵 یکپارچگی با React: این کتابخانه به طور کامل با رویکرد کامپوننتبندی React سازگار هست و مدیریت وضعیت درگ و دراپ رو بسیار ساده میکنه.
🔵 ساختار ماژولار: این کتابخانه بر اساس ساختار ماژولار طراحی شده، که به شما اجازه میده تا از کامپوننتها و هوکهای قابل استفاده مجدد بهره ببرید. این موضوع پیادهسازی و نگهداری کد رو سادهتر میکنه.
🔵 مستندات کامل و جامع: react-dnd دارای مستندات کامل و جامع هست که شامل مثالهای کاربردی و توضیحات دقیق برای هر قسمت از کتابخانه میباشد. این مستندات به دولوپرا کمک میکنه تا به سرعت با کتابخانه آشنا بشن و از اون استفاده کنن.
کتابخانه react-dnd دارای ویژگیهای متعددی هست که اون رو به ابزاری قدرتمند، برای پیادهسازی قابلیتهای درگ و دراپ در پروژه های React تبدیل میکنه. برای اطلاعات بیشتر میتونید به داکیومنتش مراجعه کنید.
Document🌐
#dnd #react
@CodeModule
react-dnd یکی از کتابخانههای محبوب برای پیادهسازی قابلیت درگ و دراپ (drag and drop) در پروژه های ریکتی هست. این کتابخانه توسط Dan Abramov توسعه داده شده و بر اساس استانداردهای HTML5 و API درگ و دراپ طراحی شده است.
ویژگیهای کلیدی react-dnd
کتابخانه react-dnd دارای ویژگیهای متعددی هست که اون رو به ابزاری قدرتمند، برای پیادهسازی قابلیتهای درگ و دراپ در پروژه های React تبدیل میکنه. برای اطلاعات بیشتر میتونید به داکیومنتش مراجعه کنید.
Document
#dnd #react
@CodeModule
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡8🔥7😁5
فرانت دولوپر ها وقتی میخوان یک پروژه ای رو با html css js خام کد بزنن و شروع کنن، باید یکسری سلسله مراتب تکراری رو انجام بدن که باعث میشه وقت زیادی ازشون گرفته بشه.
برای حل این مشکل، من یدونه بش اسکریپت نوشتم که میاد همه این کارارو در عرض ۱ ثانیه انجام میده و لازم نیست دیگه دست به سیاه و سفید بزنید.
## syntax :
bash <script dir> <project dir>
## example:
bash ~/vanilla.sh /Desktop
و تمام، پروژه شما آمادست و فقط لازمه که برید و دست به کد بشید. اگر از این پارت bash script های کاربردی حمایت بشه، پارت های خفن تری مثل نصب و کانفیگ کتابخانه ها و فریم ورک هایی مثل tailwind, react , vue , angular, svelte, qwik , next.js , ... هم براتون میزارم.
#linux #script #bash
@CodeModule
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡14🔥4❤🔥3
با رقیب جدید فیگما آشنا بشید! 💀
Creatie یک ابزار طراحی مبتنی بر هوش مصنوعیه که به طراحان کمک میکنه، تا طرحهای خودشون رو به سرعت و با کیفیت بالا ایجاد کنن. این ابزار با ارائه پیشنهادهای طراحی هوشمند و تولید خودکار محتوا، فرایند طراحی رو بهبود میبخشه. ویژگیهای مهم اون شامل همکاری تیمی، مدیریت پروژه، و یکپارچهسازی با سایر ابزارهاست.
این ابزار در مقایسه با Figma که یک ابزار معروف و محبوب در زمینه طراحی و نمونهسازیه، یه سری تفاوت داره که در ویدیو یوتیوبی که لینکش رو براتون قرار دادم، جناب عرفان عطارزاده کامل این ابزار رو شرح، و باهاش کار کرده.
Link📹
یکی از نکات جالب این ابزار اینه که، قابلیت Dev Mode رو بر خلاف فیگما به صورت رایگان ارائه میده 👩💻
#figma #Creatie
@CodeModule
Creatie یک ابزار طراحی مبتنی بر هوش مصنوعیه که به طراحان کمک میکنه، تا طرحهای خودشون رو به سرعت و با کیفیت بالا ایجاد کنن. این ابزار با ارائه پیشنهادهای طراحی هوشمند و تولید خودکار محتوا، فرایند طراحی رو بهبود میبخشه. ویژگیهای مهم اون شامل همکاری تیمی، مدیریت پروژه، و یکپارچهسازی با سایر ابزارهاست.
این ابزار در مقایسه با Figma که یک ابزار معروف و محبوب در زمینه طراحی و نمونهسازیه، یه سری تفاوت داره که در ویدیو یوتیوبی که لینکش رو براتون قرار دادم، جناب عرفان عطارزاده کامل این ابزار رو شرح، و باهاش کار کرده.
Link
#figma #Creatie
@CodeModule
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡10🔥4👌3
Lua چیه و کاربردش در Node.js 🤟
Lua یک زبان برنامه نویسی قدرتمند، کارآمد، سبک و قابل جاسازی هست و به گونه ای طراحی شده که ساده، سریع و آسان با نرم افزارهای دیگه ادغام بشه. این زبان در صنعت بازی سازی محبوبه و برای نوشتن منطق بازی و توسعه موتورهای بازی استفاده میشه، همچنین در توسعه وب برای نوشتن برنامه ها و اسکریپت های سمت سرور کاربرد داره.
اما Lua چه کاربردی در Node.js داره؟🤔
Lua به صورت دیفالت از Node.js پشتیبانی نمیکنه، اما پکیج هایی وجود داره که میشه باهاشون این مشکل رو حل کرد. یکی از کاربرد های Lua نوشتن اسکریپت برای مدیریت دیتابیس هایی مثل Redis هست، که نحوه استفاده از lua برای مدیریت Redis در Node.js به این صورته:
این اسکریپت یک key و value میگیره، و بعدش در Redis ذخیرش میکنه.
در Node.js چجوری از Lua استفاده کنیم؟
در Node.js ما با استفاده از پکیج Redis، میتونیم این اسکریپت رو اجرا و ازش استفاده کنیم، که به این صورت هست:
این فقط یک تکه کده و برای دیدن تموم کدها، به این ریپازیتوری مراجعه کنید.
به صورت کلی من شخصا از lua خیلی خوشم اومده، و هرجایی بتونم ازش استفاده میکنم. برای اطلاعات بیشتر پیشنهاد میکنم مقالات زیر رو مطالعه کنید⬇️
- Article
- Article
- Article
#nodejs #lua
@CodeModule
Lua یک زبان برنامه نویسی قدرتمند، کارآمد، سبک و قابل جاسازی هست و به گونه ای طراحی شده که ساده، سریع و آسان با نرم افزارهای دیگه ادغام بشه. این زبان در صنعت بازی سازی محبوبه و برای نوشتن منطق بازی و توسعه موتورهای بازی استفاده میشه، همچنین در توسعه وب برای نوشتن برنامه ها و اسکریپت های سمت سرور کاربرد داره.
اما Lua چه کاربردی در Node.js داره؟
Lua به صورت دیفالت از Node.js پشتیبانی نمیکنه، اما پکیج هایی وجود داره که میشه باهاشون این مشکل رو حل کرد. یکی از کاربرد های Lua نوشتن اسکریپت برای مدیریت دیتابیس هایی مثل Redis هست، که نحوه استفاده از lua برای مدیریت Redis در Node.js به این صورته:
local key = tostring(KEYS[1]);
local value = tostring(ARGV[1]);
redis.call("SET", key, value);
return { key, value };
این اسکریپت یک key و value میگیره، و بعدش در Redis ذخیرش میکنه.
در Node.js چجوری از Lua استفاده کنیم؟
در Node.js ما با استفاده از پکیج Redis، میتونیم این اسکریپت رو اجرا و ازش استفاده کنیم، که به این صورت هست:
const client = redis.createClient();
client.connect();
client.on("ready", () => console.log("Redis is ready"));
const lua = {
script: fs.readFileSync("./example_redis_script.lua", "utf8"),
};
(async()=>{
const reply = await client.eval(lua.script, {
arguments: ["value11"],
keys: ["key11"],
});
console.log("Reply:", reply);
})()
به صورت کلی من شخصا از lua خیلی خوشم اومده، و هرجایی بتونم ازش استفاده میکنم. برای اطلاعات بیشتر پیشنهاد میکنم مقالات زیر رو مطالعه کنید
- Article
- Article
- Article
#nodejs #lua
@CodeModule
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡5🔥4