जावास्क्रिप्ट लाइब्रेरी (रिवेट्स) में प्रदर्शन समस्याओं की तलाश करते समय, मैंने पाया कि कचरा संग्रह रन में तीन से चार गुना होता है, निष्पादन समय का ~ 15% (क्रोम देवटूल जेएस प्रोफाइल का उपयोग करके) लेता है।जावास्क्रिप्ट में कचरा संग्रहण ट्रिगर कर रहे स्मृति आवंटन का पता कैसे लगाएं?
कम से कम 30 स्थान हैं जहां कचरा संग्रह के कारण संभावित उम्मीदवारों के रूप में अस्थायी कार्य/वस्तुएं बनाई जाती हैं।
मैं जानना चाहता हूं कि मेमोरी को एकत्रित करने के लिए स्मृति के आवंटन के लिए कौन से फ़ंक्शन ज़िम्मेदार हैं, इसलिए मैं अपने प्रदर्शन ट्यूनिंग पर ध्यान केंद्रित कर सकता हूं।
मैं ढेर आवंटन इस समय दर्ज की गई, लेकिन यह याद है कि कचरा एकत्र किया गया था भेदभाव नहीं करता और है कि अभी भी एक संदर्भ रखती
भी दर्ज की गई ढेर आवंटन भाग्य के बिना प्रोफाइल (कोई ग्रे पट्टी DevTools doc में बताया के रूप में है)।
बहुत धन्यवाद। आपके निर्देशों के बाद, मैं विशिष्ट कार्यों की पहचान करने में कामयाब रहा। लेकिन मान उथले और बनाए रखा दिखाता है कि कार्य का आकार स्वयं रनटाइम पर आवंटित स्मृति नहीं है। उदाहरण के लिए: फ़ंक्शन बिल्ड बाइंडिंग (कक्षा की एक विधि) में 144 का उथला आकार और 144 के आकार को बनाए रखा गया है, जो अन्य कार्यों के समान है। लेकिन यह फ़ंक्शन 'var context = pipes.shift() में विभाजित कुछ अस्थायी वस्तुओं को आवंटित करता है। विभाजन ("<")। नक्शा (trimStr); ' मुझे अभी भी नहीं मिला, उदाहरण के लिए, अगर मैं इन अस्थायी वस्तुओं से बचने के लिए कार्यान्वयन को बदलता हूं तो मैं स्मृति में कितना बचत करूंगा। – blikblum
@blikblum 'var context = pipes.shift()। विभाजन (" <")। नक्शा (trimStr); 'आउटपुट तालिका में एक व्यक्तिगत रेखा पर सूचीबद्ध है? – guest271314
नहीं। यह बिल्डबाइंडिंग बॉडी का हिस्सा है। यहां वास्तविक कोड है: https://github.com/blikblum/rivets/blob/svelte/dist/rivets.js#L337 – blikblum