3 common memory Leaks
Global Variables
var a =1;
var b=1;
var c=1;
Here if I just keep adding these variables to my memory, all our memory is will eventually get used up because we are just using up memory. Imagine if these were deeply nested objects, we will be using up a lot of memory.
Event Listeners
var element = document.getElementById(‘button’)
element.addeventListener(‘click’, onClick)
This is a common way to leak memory because you can just keep adding event listeners and you don't remove them when you no longer need them. They will stay in the background and before you know, you have a memory leak.
setInterval()
If we put objects inside a setInterval(), they will never be garbage collected unless we remove the setInterval itself.
setInterval( () => { //referencing objects })
So something to keep in mind is that memory is limited. When it comes to a call stack and memory Heap, those are two places is where javascript runs and stores memory. So we have to be careful not to have memory leaks or stack overflow if we are to have efficient code.
@erfuuan_dev
Global Variables
var a =1;
var b=1;
var c=1;
Here if I just keep adding these variables to my memory, all our memory is will eventually get used up because we are just using up memory. Imagine if these were deeply nested objects, we will be using up a lot of memory.
Event Listeners
var element = document.getElementById(‘button’)
element.addeventListener(‘click’, onClick)
This is a common way to leak memory because you can just keep adding event listeners and you don't remove them when you no longer need them. They will stay in the background and before you know, you have a memory leak.
setInterval()
If we put objects inside a setInterval(), they will never be garbage collected unless we remove the setInterval itself.
setInterval( () => { //referencing objects })
So something to keep in mind is that memory is limited. When it comes to a call stack and memory Heap, those are two places is where javascript runs and stores memory. So we have to be careful not to have memory leaks or stack overflow if we are to have efficient code.
@erfuuan_dev
Forwarded from Node Master (Iman Hosseini Pour)
دنبال یک بهانه بودم که دوتا از بزرگترین و مهم ترین کتاب های computer science رو معرفی کنم.
خودم کامل نتونستم هردو رو بخونم چون به شدت سنگین هستن و وقت گیر.
در این توییت به این کتاب ها با یک داستان درمورد لینوکس و شخص سازندش یعنی لینوس توروالدز اشاره میکنم نقطه مشترکشون با این کتاب ها رو میگم
https://x.com/imanhpr_media/status/1854096388641996939?t=g2nNlKxcScFHFab8BUeELA&s=09
#Book
خودم کامل نتونستم هردو رو بخونم چون به شدت سنگین هستن و وقت گیر.
در این توییت به این کتاب ها با یک داستان درمورد لینوکس و شخص سازندش یعنی لینوس توروالدز اشاره میکنم نقطه مشترکشون با این کتاب ها رو میگم
https://x.com/imanhpr_media/status/1854096388641996939?t=g2nNlKxcScFHFab8BUeELA&s=09
#Book
✍1
Difference between Process and Thread
Process is isolated but Threads share resources(data, code, files,memory).
Processes work in complete isolation from each other, that is, they use different resources, but Threads share the same resources .
If one process is blocked, then no other process can execute.
If 1 Process is blocked, the others will not work until it is unblocked, but
if 1 Thread is blocked, the other one can do its work.
Changes to the parent process does not affect child processes.
A change in the Parent process does not affect the Child processes, but a change in the Main Thread affects other threads.
Process takes more time for creation unlike Thread.
Thread creation and termination takes much less time than Process.
@erfuuan_dev
Process is isolated but Threads share resources(data, code, files,memory).
Processes work in complete isolation from each other, that is, they use different resources, but Threads share the same resources .
If one process is blocked, then no other process can execute.
If 1 Process is blocked, the others will not work until it is unblocked, but
if 1 Thread is blocked, the other one can do its work.
Changes to the parent process does not affect child processes.
A change in the Parent process does not affect the Child processes, but a change in the Main Thread affects other threads.
Process takes more time for creation unlike Thread.
Thread creation and termination takes much less time than Process.
@erfuuan_dev
✍1
Forwarded from DevTwitter | توییت برنامه نویسی
یک برنامهنویس با تجربه به این 17 مورد توجه مینماید:
0- عاشق کدی که نوشتی نشو، همیشه باید سعی کنی بهترش کنی
1- در شرایط اورژانسی میفهمی پیچیدگی الکی درست کردن چطوری پاره میکند
2- هر روش و تکنولوژی بالاخره مزایا و معایب خودش را دارد و قطعاً هر چیزی Trade-off های خودش را دارد - حواست باشد، بهترینی وجود ندارد
3- هر خط کدی که مینویسی برای کسی یا جایی یک سرمایه است - شاید هم برای خودت
4- همه میگن کدهای بقیه کثافت است
5- بیخودی Dependency ایجاد نکنید
6- درست کد بنویسید، دعوا و درگیری و متوجه نشدن کم میشود
7- حالا یکم Comment بنویسید، جای دوری نمیرود، ولی کد خودش باید کامنت خودش باشد
8- سر یاد گرفتن چیزهای جدید مقاومت نکنید، لازم است
9- از Code Review نترسید، سبب انتشار و Share شدن دانش میگردد
10- همیشه maintainability را در نظر داشته باشید - شما در حال سیمانریزی و ایجاد یک چیزی که هرگز دست نخورد نیستید
11- جایی لازم بود، کمک بگیرید
12 - اصل مشکل را در کد حل کنید نه فقط یک جنبه از خطا را
13- هیچ پروژه و برنامهای خلاص نخواهد شد، همیشه هست
14- زمانبندی دادن با قول دادن و قسم خوردن یکی نیست، فقط یک احتمال است
15- طراحی و مهندسی سیستم را همان ابتدا مستند سازی کنید
16- پروژه را بدهید بیرون سریع، بعد آرام آرام با یک برنامه مشخص کاملش کنید
@DevTwitter | <Ali Kolahdoozan/>
0- عاشق کدی که نوشتی نشو، همیشه باید سعی کنی بهترش کنی
1- در شرایط اورژانسی میفهمی پیچیدگی الکی درست کردن چطوری پاره میکند
2- هر روش و تکنولوژی بالاخره مزایا و معایب خودش را دارد و قطعاً هر چیزی Trade-off های خودش را دارد - حواست باشد، بهترینی وجود ندارد
3- هر خط کدی که مینویسی برای کسی یا جایی یک سرمایه است - شاید هم برای خودت
4- همه میگن کدهای بقیه کثافت است
5- بیخودی Dependency ایجاد نکنید
6- درست کد بنویسید، دعوا و درگیری و متوجه نشدن کم میشود
7- حالا یکم Comment بنویسید، جای دوری نمیرود، ولی کد خودش باید کامنت خودش باشد
8- سر یاد گرفتن چیزهای جدید مقاومت نکنید، لازم است
9- از Code Review نترسید، سبب انتشار و Share شدن دانش میگردد
10- همیشه maintainability را در نظر داشته باشید - شما در حال سیمانریزی و ایجاد یک چیزی که هرگز دست نخورد نیستید
11- جایی لازم بود، کمک بگیرید
12 - اصل مشکل را در کد حل کنید نه فقط یک جنبه از خطا را
13- هیچ پروژه و برنامهای خلاص نخواهد شد، همیشه هست
14- زمانبندی دادن با قول دادن و قسم خوردن یکی نیست، فقط یک احتمال است
15- طراحی و مهندسی سیستم را همان ابتدا مستند سازی کنید
16- پروژه را بدهید بیرون سریع، بعد آرام آرام با یک برنامه مشخص کاملش کنید
@DevTwitter | <Ali Kolahdoozan/>
Code & Life
Photo
توی دل Event Loop چه خبره؟
ایونت لوپ یه مکانیزم هوشمندانه در Node.js هست که کارهای غیرهمزمان رو مدیریت میکنه. وقتی کدهای مختلف رو مینویسیم و منتظر نتیجه اونها میمونیم، Event Loop بهطور خودکار این کارها رو پشتصحنه مدیریت میکنه و ما رو از نگرانیهای پیچیده دور نگه میداره. ولی این روند خیلی پیچیدهتر از چیزیه که به نظر میاد. توی این توضیحات، من سعی میکنم ساده و خودمونی براتون توضیح بدم که چطور این اتفاقها میافتن.
خلاصهای از عملکرد Event Loop
ایونت لوپ از چندین فاز یا مرحله مختلف تشکیل شده که هرکدوم مسئول انجام یه سری کار خاص هستن. وقتی Event Loop وارد هر فاز میشه، یه صف FIFO (اول وارد، اول خارج) رو اجرا میکنه. یعنی کالبکها رو یکییکی از صف میگیره و اجرا میکنه. وقتی فاز تموم شد، میره به فاز بعدی.
به زبان ساده، هر مرحله مثل یک ایستگاه توی یک قطار هست. هر ایستگاه کار خودش رو انجام میده و وقتی تموم شد، قطار به ایستگاه بعدی میره. این چرخه ادامه پیدا میکنه تا تمام کارها انجام بشه.
مراحل مختلف Event Loop:
۱. Timers (تایمرها)
اولین مرحله، مرحلهی تایمر هاست. توی این قسمت، توابعی که با setTimeout() یا setInterval() تنظیم کردیم، اجرا میشن. یعنی وقتی زمان مشخصی که براشون تعیین کردیم تموم بشه، این توابع شروع به کار میکنن. البته، زمان دقیق اجرای این توابع ممکنه تحت تأثیر کدهای دیگه هم قرار بگیره. پس در واقع، Event Loop نمیتونه تضمین کنه که دقیقاً در زمان تعیینشده اجرا بشن.
مثال: فرض کن یه تایمر ۵ ثانیهای گذاشتی که بعد از ۵ ثانیه یه پیام رو چاپ کنه. وقتی تایم تموم میشه، این تابع وارد صف تایمرها میشه و بعد اجرا میشه.
۲. Pending Callbacks (کالبکهای معلق)
حالا، مرحلهی بعدی برای اونهایی هست که توابعی رو اجرا کردن که به نوعی با ورودی یا خروجی (I/O) سروکار دارن و منتظر کالبک هستن. مثلاً اگر یک درخواست HTTP به یه سرور دادهایم و منتظر جواب هستیم، وقتی سرور جواب داد، اینجا کالبک اجرا میشه.
مثال: فرض کن یک فایل رو از دیسک میخونی. وقتی خونده شد، کالبک باید اجرا بشه و به تو بگه که فایل آماده است. این مرحله مسئولیت اون رو به عهده داره.
۳. Idle, Prepare (آمادهسازی)
این مرحله بیشتر به کارهای داخلی Node.js مربوط میشه و معمولاً در برنامههای معمولی خیلی بهش نمیپردازیم. اما به طور کلی، Node.js این مرحله رو برای آمادهسازی خودش انجام میده تا وارد مراحل بعدی بشه.
۴. Poll (پُل)
مرحلهی پُل، قلب تپندهی Event Loop هست. اینجا، Node.js منتظره که ببینه آیا اتفاقی میافته یا نه. یعنی در اینجا منتظره تا رویدادی بیفته، مثل دریافت یک درخواست جدید، اتصال جدید، یا هر چیز دیگهای که به صورت غیرهمزمان نیاز به پردازش داشته باشه.
اگر رویدادی نباشه، ممکنه یه مدت وایسه یا حتی به فازهای بعدی بره. این مرحله بهطور کلی مسئول نظارت بر وقوع رویدادهای جدید هست.
مثال: فرض کن یک کاربر یه درخواست ارسال کرده و حالا Node.js منتظره که جواب از دیتابیس بیاد. تا وقتی که جواب نیاد، هیچکاری نمیکنه و منتظر میمونه.
۵. Check (چک)
بعد از مرحلهی پُل، نوبت به توابعی میرسه که با setImmediate() تنظیم شدهاند. این توابع بعد از مرحلهی پُل و قبل از مرحلهی Close Callbacks اجرا میشن.
این مرحله به نوعی نظارت میکنه که اگه هنوز چیزی منتظره نباشه، توابعی که باید فوراً بعد از پُل اجرا بشن، اجرا بشن.
۶. Close Callbacks (کالبکهای بستهشدن)
مرحلهی آخر، مرحلهی کالبکهای بستهشدن هست. اینجا، توابعی که نیاز به اجرا شدن بعد از بسته شدن چیزی دارن، اجرا میشن. مثلاً وقتی یک سوکت بسته میشه و باید کالبک اجرا بشه، اینجا انجام میشه.
مثال: فرض کن یک اتصال شبکه بسته میشه و باید یه فعالیت خاصی مثل بستن فایلها یا آزادسازی منابع انجام بشه. این مرحله هم همون کار رو میکنه.
نتیجهگیری :
حالا که این مراحل رو با هم مرور کردیم، متوجه شدیم که چطور Node.js از این فازها برای مدیریت کارهای غیر همزمان استفاده میکنه. این فرآیند پیچیده، ولی در عین حال خیلی کارآمد هست و باعث میشه که Node.js بتونه به طور همزمان تعداد زیادی از کارها رو انجام بده بدون اینکه نیاز به چندین نخ (thread) داشته باشه.
اینکه بدونید Event Loop چطور کار میکنه، بهتون کمک میکنه که درک بهتری از نحوه عملکرد Node.js داشته باشید و بتونید برنامههاتون رو بهینهتر بنویسید.
@erfuuan_dev
ایونت لوپ یه مکانیزم هوشمندانه در Node.js هست که کارهای غیرهمزمان رو مدیریت میکنه. وقتی کدهای مختلف رو مینویسیم و منتظر نتیجه اونها میمونیم، Event Loop بهطور خودکار این کارها رو پشتصحنه مدیریت میکنه و ما رو از نگرانیهای پیچیده دور نگه میداره. ولی این روند خیلی پیچیدهتر از چیزیه که به نظر میاد. توی این توضیحات، من سعی میکنم ساده و خودمونی براتون توضیح بدم که چطور این اتفاقها میافتن.
خلاصهای از عملکرد Event Loop
ایونت لوپ از چندین فاز یا مرحله مختلف تشکیل شده که هرکدوم مسئول انجام یه سری کار خاص هستن. وقتی Event Loop وارد هر فاز میشه، یه صف FIFO (اول وارد، اول خارج) رو اجرا میکنه. یعنی کالبکها رو یکییکی از صف میگیره و اجرا میکنه. وقتی فاز تموم شد، میره به فاز بعدی.
به زبان ساده، هر مرحله مثل یک ایستگاه توی یک قطار هست. هر ایستگاه کار خودش رو انجام میده و وقتی تموم شد، قطار به ایستگاه بعدی میره. این چرخه ادامه پیدا میکنه تا تمام کارها انجام بشه.
مراحل مختلف Event Loop:
۱. Timers (تایمرها)
اولین مرحله، مرحلهی تایمر هاست. توی این قسمت، توابعی که با setTimeout() یا setInterval() تنظیم کردیم، اجرا میشن. یعنی وقتی زمان مشخصی که براشون تعیین کردیم تموم بشه، این توابع شروع به کار میکنن. البته، زمان دقیق اجرای این توابع ممکنه تحت تأثیر کدهای دیگه هم قرار بگیره. پس در واقع، Event Loop نمیتونه تضمین کنه که دقیقاً در زمان تعیینشده اجرا بشن.
مثال: فرض کن یه تایمر ۵ ثانیهای گذاشتی که بعد از ۵ ثانیه یه پیام رو چاپ کنه. وقتی تایم تموم میشه، این تابع وارد صف تایمرها میشه و بعد اجرا میشه.
۲. Pending Callbacks (کالبکهای معلق)
حالا، مرحلهی بعدی برای اونهایی هست که توابعی رو اجرا کردن که به نوعی با ورودی یا خروجی (I/O) سروکار دارن و منتظر کالبک هستن. مثلاً اگر یک درخواست HTTP به یه سرور دادهایم و منتظر جواب هستیم، وقتی سرور جواب داد، اینجا کالبک اجرا میشه.
مثال: فرض کن یک فایل رو از دیسک میخونی. وقتی خونده شد، کالبک باید اجرا بشه و به تو بگه که فایل آماده است. این مرحله مسئولیت اون رو به عهده داره.
۳. Idle, Prepare (آمادهسازی)
این مرحله بیشتر به کارهای داخلی Node.js مربوط میشه و معمولاً در برنامههای معمولی خیلی بهش نمیپردازیم. اما به طور کلی، Node.js این مرحله رو برای آمادهسازی خودش انجام میده تا وارد مراحل بعدی بشه.
۴. Poll (پُل)
مرحلهی پُل، قلب تپندهی Event Loop هست. اینجا، Node.js منتظره که ببینه آیا اتفاقی میافته یا نه. یعنی در اینجا منتظره تا رویدادی بیفته، مثل دریافت یک درخواست جدید، اتصال جدید، یا هر چیز دیگهای که به صورت غیرهمزمان نیاز به پردازش داشته باشه.
اگر رویدادی نباشه، ممکنه یه مدت وایسه یا حتی به فازهای بعدی بره. این مرحله بهطور کلی مسئول نظارت بر وقوع رویدادهای جدید هست.
مثال: فرض کن یک کاربر یه درخواست ارسال کرده و حالا Node.js منتظره که جواب از دیتابیس بیاد. تا وقتی که جواب نیاد، هیچکاری نمیکنه و منتظر میمونه.
۵. Check (چک)
بعد از مرحلهی پُل، نوبت به توابعی میرسه که با setImmediate() تنظیم شدهاند. این توابع بعد از مرحلهی پُل و قبل از مرحلهی Close Callbacks اجرا میشن.
این مرحله به نوعی نظارت میکنه که اگه هنوز چیزی منتظره نباشه، توابعی که باید فوراً بعد از پُل اجرا بشن، اجرا بشن.
۶. Close Callbacks (کالبکهای بستهشدن)
مرحلهی آخر، مرحلهی کالبکهای بستهشدن هست. اینجا، توابعی که نیاز به اجرا شدن بعد از بسته شدن چیزی دارن، اجرا میشن. مثلاً وقتی یک سوکت بسته میشه و باید کالبک اجرا بشه، اینجا انجام میشه.
مثال: فرض کن یک اتصال شبکه بسته میشه و باید یه فعالیت خاصی مثل بستن فایلها یا آزادسازی منابع انجام بشه. این مرحله هم همون کار رو میکنه.
نتیجهگیری :
حالا که این مراحل رو با هم مرور کردیم، متوجه شدیم که چطور Node.js از این فازها برای مدیریت کارهای غیر همزمان استفاده میکنه. این فرآیند پیچیده، ولی در عین حال خیلی کارآمد هست و باعث میشه که Node.js بتونه به طور همزمان تعداد زیادی از کارها رو انجام بده بدون اینکه نیاز به چندین نخ (thread) داشته باشه.
اینکه بدونید Event Loop چطور کار میکنه، بهتون کمک میکنه که درک بهتری از نحوه عملکرد Node.js داشته باشید و بتونید برنامههاتون رو بهینهتر بنویسید.
@erfuuan_dev
🙏2
Forwarded from تهلاگ / Tehlug
ثبتنام رویداد ۲۷۷ تهلاگ آغاز شد! 🎉
رویداد ۲۷۷ در روز پنجشنبه، ۱۱ بهمن ۱۴۰۳ شامل ۶ ارائه فنی و ۲ کارگاه آموزشی برگزار میشود و فرصتی عالی برای علاقهمندان به لینوکس، جامعه نرمافزار آزاد و متنباز، پایتون و فناوریهای کلود است.
اطلاعات بیشتر و ثبتنام :
🔗 evand.com/events/tehlug277
@TehranLUG
رویداد ۲۷۷ در روز پنجشنبه، ۱۱ بهمن ۱۴۰۳ شامل ۶ ارائه فنی و ۲ کارگاه آموزشی برگزار میشود و فرصتی عالی برای علاقهمندان به لینوکس، جامعه نرمافزار آزاد و متنباز، پایتون و فناوریهای کلود است.
اطلاعات بیشتر و ثبتنام :
🔗 evand.com/events/tehlug277
@TehranLUG
❤1
به تازگی شروع کردم یادگرفتن Go . نکاتی که حس میکنم بدرد میخوره اینجا هم میزارم
امروز داشتم درباره سیستم های Rules Engine مطالعه میکردم. یکم دیگه درباره شون مینویسم
👍2