خطاهای حافظه می توانند ترسناک و گیج کننده باشند، اما رفع این خطای Node.js آسان است.
یک مشکل رایج در حین کار بر روی یک پروژه جاوا اسکریپت Node.js خطای “JavaScript heap out of memory” است. این خطا معمولا زمانی رخ می دهد که حافظه پیش فرض اختصاص داده شده توسط سیستم شما به Node.js برای اجرای یک پروژه بزرگ کافی نباشد.
چه شما پروژه خود را در ویندوز، macOS یا توزیع لینوکس مانند اوبونتو اجرا کنید، این خطا رایج است. خوشبختانه، چند راه حل آسان وجود دارد که می تواند به رفع خطای «JavaScript heap out of memory» کمک کند.
حافظه هیپ چیست؟
قبل از اینکه به رفع خطا نگاه کنید، درک اینکه حافظه پشته چیست و برنامه ها چگونه از آن استفاده می کنند مفید است.
حافظه تخصیص یافته در پشته سیستم را حافظه تخصیص یافته پویا نیز می نامند. این به برنامه نویس بستگی دارد که از حافظه موجود به دلخواه خود استفاده کند. مهمتر از همه، اندازه پشته برای یک برنامه به حافظه مجازی موجود اختصاص داده شده به آن بستگی دارد.
اگر پروژه نسبتاً بزرگی را اجرا می کنید، ممکن است به حافظه بیشتری نسبت به قطعه اختصاص داده شده پیش فرض نیاز داشته باشد. این ممکن است باعث شود پروژه شما از کار بیفتد و خطای “JavaScript heap out of memory” را وارد کنید.
مرتبط:نحوه مدیریت خطاها در جاوا اسکریپت
چگونه حافظه خالی جاوا اسکریپت را در ویندوز برطرف کنیم
صرف نظر از IDE شما، اصلاح “حافظه خالی از جاوا اسکریپت” یکسان است.
برای افزایش حافظه اختصاص داده شده به پروژه Node.js می توانید یک متغیر محیطی از طریق Control Panel اضافه کنید.
- منوی Start را باز کنید، Advanced System Settings را جستجو کنید و بهترین مطابقت را انتخاب کنید.
- از کادر محاوره ای، روی Environment Variables کلیک کنید، سپس روی New from هر متغیر System یا User variables کلیک کنید. مورد اول برای همه کاربران رایانه شما اعمال می شود، در حالی که دومی فقط روی حساب فعلی شما تأثیر می گذارد
در قسمت نام متغیر، NODE_OPTIONS را وارد کنید. در قسمت Variable مقدار –max-old-space-size=4096 را وارد کنید. این مقدار 4 گیگابایت حافظه مجازی را به Node.js اختصاص می دهد. - برای تنظیم یک مقدار متفاوت، مقدار مورد نیاز در گیگابایت را در 1024 ضرب کنید (مقدار متغیر باید بر حسب مگابایت باشد).
- برای ذخیره تغییرات روی OK کلیک کنید، سپس روی Apply کلیک کنید و در آخر یک بار دیگر روی OK کلیک کنید. پروژه خود را مجدداً راه اندازی کنید تا تغییرات اعمال شوند.
همچنین می توانید یک متغیر محیطی را از طریق ترمینال Windows PowerShell تنظیم کنید.
ترمینال PowerShell را راه اندازی کنید، دستور زیر را تایپ کنید و Enter را فشار دهید:
$env:NODE_OPTIONS="--max-old-space-size=4096"
اگر فقط می خواهید حافظه پشته را به طور موقت افزایش دهید، قبل از اجرای پروژه، دستور زیر را در ترمینال PowerShell اجرا کنید:
set NODE_OPTIONS=--max-old-space-size=4096
هنگامی که این دستور را وارد کردید، می توانید پروژه خود را با استفاده از npm run dev یا اسکریپت خود اجرا کنید.
هشدار: همیشه به یاد داشته باشید که حجم حافظه مورد نیاز را بر حسب مگابایت وارد کنید. عدم انجام این کار می تواند باعث ایجاد رفتار غیرمنتظره در برنامه شما شود. همچنین ضروری است که کل حافظه موجود خود را تخصیص ندهید زیرا این امر می تواند باعث خرابی قابل توجه سیستم شود.
نحوه رفع خطای جاوا اسکریپت Heap Out of Memory در macOS و Linux
در macOS و Linux، رفع حافظه پشته بسیار مشابه است. شما باید یک متغیر محیطی را صادر کنید که مقدار حافظه مجازی اختصاص داده شده به Node.js را مشخص کند.
در ترمینال خود، قبل از اجرای پروژه خود، دستور زیر را وارد کرده و Enter را فشار دهید:
export NODE_OPTIONS=--max-old-space-size=4096
با این کار 4 گیگابایت حافظه مجازی به فضای اجرایی Node.js اختصاص می یابد. برای تنظیم مقدار متفاوت حافظه، 4096 را با مقدار مورد نیاز در مگابایت جایگزین کنید.
نکته: برای جلوگیری از تکرار فرآیند می توانید دستور بالا را به فایل پیکربندی خود اضافه کنید. برای انجام این کار، همان فرآیند را برای تنظیم متغیر PATH خود دنبال کنید.
مرتبط:نحوه فعال کردن جاوا اسکریپت در موزیلا فایرفاکس
از خطای جاوا اسکریپت Heap Out of Memory اجتناب کنید
شما می توانید با اطمینان از اینکه برنامه شما فاقد نشت حافظه است، از این خطا جلوگیری کنید. مدیریت مناسب حافظه هنگام نوشتن برنامه های شما، به خصوص به زبان های سطح پایین بسیار مهم است.
در حالی که افزایش حافظه اختصاص داده شده به طور موقت مشکل را برطرف می کند، باید علت اصلی را پیدا کنید و آن را برطرف کنید.