जैसे-जैसे आपके जावास्क्रिप्ट एप्लिकेशन बढ़ते हैं, प्रदर्शन का अनुकूलन आवश्यक हो जाता है। एक महत्वपूर्ण पहलू स्मृति को कुशलतापूर्वक प्रबंधित करना है। जावास्क्रिप्ट का स्वचालित कचरा संग्रहण (जीसी) मदद करता है, लेकिन यह कैसे काम करता है—और मेमोरी लीक से कैसे बचा जाए—यह समझने से आपके ऐप के प्रदर्शन में काफी सुधार हो सकता है। यह पोस्ट आधुनिक जावास्क्रिप्ट इंजनों में मेमोरी प्रबंधन तकनीकों और उन्नत GC व्यवहार पर गहराई से प्रकाश डालता है।
जावास्क्रिप्ट में मेमोरी आवंटन
जब वेरिएबल घोषित किए जाते हैं तो जावास्क्रिप्ट स्वचालित रूप से मेमोरी आवंटित करता है और जब आवश्यकता नहीं होती है तो इसे हटा देता है। हालाँकि, यह जानना कि मेमोरी कैसे आवंटित की जाती है - स्टैक बनाम हीप - जटिल ऐप्स में संसाधनों को कुशलतापूर्वक प्रबंधित करने के लिए महत्वपूर्ण है।
1. स्टैक मेमोरी:
आदिम मान संग्रहीत करता है (उदाहरण के लिए, संख्याएं, बूलियन)।
LIFO (लास्ट-इन, फर्स्ट-आउट) एक्सेस, इसे छोटे डेटा के लिए तेज़ बनाता है।
2. ढेर मेमोरी:
ऑब्जेक्ट और फ़ंक्शन जैसे संदर्भ प्रकारों के लिए उपयोग किया जाता है।
पहुंचने में बड़ा और धीमा लेकिन लचीला।
कचरा संग्रहण कैसे काम करता है
अप्रयुक्त मेमोरी को हटाने के लिए जावास्क्रिप्ट एक मार्क-एंड-स्वीप एल्गोरिदम का उपयोग करता है। जब किसी वस्तु का संदर्भ नहीं रह जाता है, तो वह "कचरा" बन जाती है और संग्रहण के योग्य हो जाती है। हालाँकि, यदि मेमोरी का प्रबंधन गलत हो तो स्वचालित GC पर निर्भरता समस्याएँ पैदा कर सकती है।
मार्क-एंड-स्वीप: जीसी रूट (वैश्विक निष्पादन संदर्भ) से शुरू होने वाली पहुंच योग्य वस्तुओं को चिह्नित करता है, और किसी भी अचिह्नित वस्तुओं को कचरा माना जाता है।
पीढ़ीगत कचरा संग्रह: कई जावास्क्रिप्ट इंजन (जैसे वी8) जेनरेशनल जीसी का उपयोग करते हैं, जहां मेमोरी को "युवा" और "पुरानी" पीढ़ियों में विभाजित किया जाता है। युवा पीढ़ी अधिक बार संग्रह करती है, जबकि पुरानी पीढ़ी लंबे समय तक जीवित रहने वाली वस्तुओं को संभालती है।
मेमोरी लीक से बचना
स्वचालित जीसी के साथ भी, यदि वस्तुओं के संदर्भ अनजाने में बनाए रखे जाते हैं तो मेमोरी लीक हो सकती है। सामान्य कारणों में शामिल हैं:
function leak() { myGlobalVar = 'I am global'; }
function outer() { let largeObject = { /* some data */ }; return function inner() { console.log(largeObject); }; }
const element = document.getElementById('myButton'); element.addEventListener('click', () => console.log('Clicked')); // Be sure to remove listeners when not needed
const element = document.getElementById('myElement'); document.body.removeChild(element);
मेमोरी अनुकूलन के लिए उन्नत तकनीकें
1.मैनुअल मेमोरी प्रोफाइलिंग: मेमोरी उपयोग को प्रोफाइल करने और लीक या अनावश्यक रूप से बनी रहने वाली वस्तुओं का पता लगाने के लिए ब्राउज़र डेवलपर टूल का उपयोग करें।
क्रोम डेवटूल्स: हीप स्नैपशॉट के लिए मेमोरी टैब।
फ़ायरफ़ॉक्स: मेमोरी लीक के लिए प्रदर्शन उपकरण।
2.वीकमैप्स और वीकसेट्स: जब आप कचरा संग्रहण को रोके बिना वस्तुओं को संग्रहीत करना चाहते हैं, तो वीकमैप्स या वीकसेट का उपयोग करें। जब वस्तुओं का कोई अन्य संदर्भ न हो तो ये संरचनाएँ स्वचालित GC की अनुमति देती हैं।
let wm = new WeakMap(); let obj = {}; wm.set(obj, 'someValue'); obj = null; // 'obj' is now eligible for GC.
3.लूप्स और रिकर्सन को अनुकूलित करना: टेल-कॉल ऑप्टिमाइज़ेशन या पुनरावृत्त तरीकों का उपयोग करके पुनरावर्ती कार्यों में अनावश्यक मेमोरी खपत से बचें। इसके अलावा, बड़े लूप या ऐरे ऑपरेशंस से सावधान रहें जो मेमोरी स्पाइक्स का कारण बन सकते हैं।
4.डिफ़र और आलसी लोडिंग: अनावश्यक मेमोरी खपत को रोकते हुए, उन स्क्रिप्ट और संपत्तियों को लोड करके या आलसी करके मेमोरी उपयोग को अनुकूलित करें जिनकी तुरंत आवश्यकता नहीं है।
निष्कर्ष:
हालांकि जावास्क्रिप्ट का कचरा संग्रहकर्ता भारी भार उठाने का काम संभालता है, लेकिन मेमोरी को कैसे आवंटित और जारी किया जाता है, इसका ध्यान रखने से प्रदर्शन में सुधार हो सकता है, खासकर जटिल या लंबे समय तक चलने वाले अनुप्रयोगों में। इन मेमोरी प्रबंधन रणनीतियों को लागू करके, आप यह सुनिश्चित करेंगे कि आपके ऐप्स बड़े पैमाने पर प्रदर्शनशील बने रहें।
पढ़ने के लिए धन्यवाद! बेझिझक अपने विचार या अपनी परियोजनाओं में उपयोग की जाने वाली कोई उन्नत मेमोरी प्रबंधन युक्तियाँ साझा करें।??
मेरी वेबसाइट पर जाएँ:https://shafayet.zya.me
आपके लिए एक मीम?
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3