منتدى رواية عشق

منتدى رواية عشق (https://r-eshq.com/vb/index.php)
-   ϟ تَطويـر المُنتديـات ϟ (https://r-eshq.com/vb/forumdisplay.php?f=52)
-   -   كيفية إدارة الذاكرة في جافا سكريبت (https://r-eshq.com/vb/showthread.php?t=217794)

Şøķåŕą 02-03-2023 12:38 PM

كيفية إدارة الذاكرة في جافا سكريبت
 
في لغة البرمجة (JavaScript)، عندما ننشئ متغيرات أو وظائف أو أي شيء يمكن أن يخطر ببالك، يخصص محرك (JS) ذاكرة لهذا ويطلقها بمجرد عدم الحاجة إليها، حيث أن تخصيص الذاكرة هو عملية حجز مساحة في الذاكرة أثناء تحرير الذاكرة، مما يؤدي إلى توفير مساحة جاهزة للاستخدام لغرض آخر.

دورة حياة الذاكرة في جافا سكريبت


هناك (3) مراحل أو أجزاء من دورة حياة الذاكرة والتي هي نفسها لجميع لغات البرمجة؛ وهي:


تخصيص الذاكرة: حيث تعتني (JavaScript) بهذا الأمر فهي تخصص الذاكرة التي سيحتاجها المستخدم للكائن الذي أنشأه.


استخدام الذاكرة: حيث أن استخدام الذاكرة هو شيء نقوم به بشكل صريح في الكود الخاص بنا، حيث أن القراءة والكتابة في الذاكرة ليست سوى القراءة أو الكتابة من أو إلى متغير.

تحرير الذاكرة: يتم التعامل مع هذه الخطوة أيضًا بواسطة محرك (JavaScript)، حيث أنه بمجرد تحرير الذاكرة المخصصة، يمكن استخدامها لغرض جديد.


كيفية تخزين محرك جافا سكريبت / ذاكرة stack و heap


تقوم محركات (JavaScript) بتخزين بياناتها في مكانين؛ ذاكرة (Stack) وذاكرة (Heap)، فيما يلي توضيح لكل منهما:





1. ذاكرة Stack


وهي نوع من بنية البيانات التي تستخدم طريقة (Last-in-First-out (LIFO)) لتخزين البيانات الثابتة، بسبب حجمها الثابت، والمعروف أثناء وقت الترجمة بواسطة المحرك فهي ذاكرة ثابتة، وتشتمل البيانات الثابتة في (JavaScript) على مراجع للكائنات والوظائف بالإضافة إلى القيم الأولية مثل: (strings, number, Boolean, null, undefined, symbol, BigInt).



2. ذاكرة Heap


تخصيص الذاكرة الديناميكي هي طريقة أخرى لتخزين البيانات في الذاكرة، وتستخدم هذه الذاكرة لتخزين الأشياء في الذاكرة، ولا تخصص جافا سكريبت لـ (Heap) مقدارًا ثابتًا من الذاكرة كما يفعل (Stack)، وبدلاً من ذلك، فإنها تخصص مساحة أكبر أثناء وقت التشغيل، أي الحجم المعروف في وقت التشغيل ولا يوجد حد لذاكرة الكائن.



ما المقصود بتسرب ذاكرة جافا سكريبت


تسرب الذاكرة، هو تخصيص للذاكرة يتعذر على محرك (JavaScript) استرداده، حيث أنه عند إضافة كائنات ومتغيرات إلى برنامجك، يقوم محرك (JavaScript) بتخصيص الذاكرة، وهو ذكي بدرجة كافية لتحرير الذاكرة عندما لا تكون الكائنات مطلوبة، وتؤدي الأخطاء المنطقية إلى تسرب الذاكرة مما يؤثر سلبًا على سرعة برنامجك، لنلق نظرة على أكثر تسريبات ذاكرة جافا سكريبت شيوعًا:



1. المتغيرات العالمية Global Variables


عندما يتم تخزين البيانات في متغيرات عالمية، فإنه يتسبب في حدوث تسرب للذاكرة، مثل استخدام (var) في التعليمات البرمجية الخاصة بك بدلاً من (let أو const)، كما يتم تخزين المتغيرات غير المعلنة في الكائن العام، لتجنب هذا الوضع استخدم (strict) لتمكين تطبيقات أكثر أمانًا وكذلك منع المتغيرات العامة غير المرغوب فيها أو يمكنك تعيين المتغير العام إلى فارغ (مثل window.name = null) بعد الاستخدام لمنع تسرب ذاكرة (JavaScript) لأن هذه المراجع مخزنة مباشرة في الجذر ولا يمكن جمعها.

2. حدث Forgotten timers


(SetTimeout و SetInterval) هما حدثان زمنيان متاحان في (JavaScript) وهما ميزات مهمة للغاية، حيث أن (SetTimeout) هي وظيفة غير متزامنة يتم تنفيذها بعد انتهاء الوقت المحدد عادةً بالمللي ثانية، بينما يسمح (SetInterval) بالتنفيذ المتكرر للرمز على فترات زمنية مختلفة “وقت محدد”، حيث أن غالبية تسربات الذاكرة ناتجة عن هذه الموقتات، ولحل هذه المشكلة، استخدم دائمًا (() clearInterval) عندما تعرف أن الوظيفة لن تكون مطلوبة، سيكون كذلك (clearInterval (differentInterval)) لإلغاء الفاصل الزمني بعد استخدامه.

بسمة فجر 02-03-2023 11:08 PM

بارك الله فيك ع موضوعك القيم والمميز
وبانتظار جديدك القادم
ارق التحايا لك

شيخة الزين 02-04-2023 06:42 AM

سلمت كفوفك لطيب الجهد
وَ تمُيز العطاء
لاحرمنا الله روائِع مجهوداتك

نور القمر 02-04-2023 05:25 PM

يعطيك العافيه عالموضوع وتسلم يمينك
بانتظار جديدك

ودي ووردي

eyes beirut 02-04-2023 06:30 PM

تسلم ايدك ع الطرح
يعتيك العافية

اميرة الصمت 02-05-2023 07:07 PM

سلمت اناملك ويعطيك العافيه علي مجهودك
في أنتظار المزيد
من عطائك والمزيد ومواضيعك الرائعة والجميله
ودائما في إبداع مستمر


الساعة الآن 09:06 AM

Powered by vBulletin Hosting By R-ESHQ
HêĽм √ 3.1 BY: ! RESHQ ! © 2010
new notificatio by R-ESHQ
User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.
تنويه : المشاركات المطروحة تعبر عن وجهة نظر أصحابها وليس بالضرورة تمثل رأي أدارة الموقع