2013-03-10 7 views
6

हाय, मैं धीरे-धीरे क्रोम एक्सटेंशन बना रहा हूं, और मुझे कुछ डेटा को पार्स करने की आवश्यकता है जिसमें HTML इकाइयां हैं, और मुझे इसे डीकोड करने की आवश्यकता है। मैं यहाँ एक जवाब में देखा कि मैं इसके लिए document.createElement इस्तेमाल कर सकते हैं, तो मैं ऐसा किया:document.createElement के साथ बनाए गए तत्व स्मृति में रहें?

htmlDecode: function(input) { 
    if(/[<>]/.test(input)) { // To avoid creating tags like <script> :s 
     return "Invalid Input"; 
    } 
    var e = document.createElement('div'); 
    e.innerHTML = input; 
    return e.childNodes.length === 0 ? "" : e.childNodes[0].nodeValue; 
} 

हालांकि मुझे चिंता है कि document.createElement तत्वों पीछे छोड़ देता है क्योंकि इस समारोह पृष्ठभूमि स्क्रिप्ट पर चलता हूँ, इसलिए यह यह की तरह नहीं है अक्सर ताज़ा हो जाता है, और यह हर 5 मिनट में लगभग 35000 बार चलता है।

तो, document.createElement द्वारा बनाए गए तत्वों को मुक्त करें, या वे रहते हैं? मेरा मतलब है, मैं उन्हें कहीं भी शामिल नहीं करता हूं और उन्हें स्थानीय चर के लिए assiged हैं, लेकिन मुझे यकीन नहीं है।

+1

निश्चित रूप से, फ़ंक्शन चलाने के बाद अब div को संदर्भित नहीं किया गया है, इसलिए अंत में कचरा इकट्ठा किया जाएगा। – Bergi

उत्तर

1

वे कचरा इकट्ठा किया जाएगा। विशेष रूप से, चूंकि आप क्रोम एक्सटेंशन विकसित कर रहे हैं, इसलिए V8 इस तरह के अस्थायी रीसायकल को बहुत तेज़ करता है, इसलिए यह चिंता का विषय नहीं होना चाहिए।

यदि आप सामान्य रूप से इस बारे में चिंतित हैं, तो एक आम समाधान केवल नौकरी करने के लिए एक div को रखना है।

+0

मुझे लगता है कि आप सही हैं, मैं बस सोच रहा था कि क्या बनाया गया तत्व दस्तावेज़ में कहीं भी अटक सकता है। मैं एक div बनाने से बचना चाहता था, हालांकि यह भी बेहतर हो सकता है क्योंकि शाब्दिक रूप से, इसे 35k बार से अधिक कहा जाता है, और तत्व के बाद तत्व बना सकता है, भले ही वे एकत्र हो जाएं। – Goodwine

+1

यदि आप प्रदर्शन के बारे में चिंतित हैं, तो एक एकल div बनाना और इसका पुन: उपयोग करना शायद अधिक कुशल होगा। मैं निश्चित रूप से यह नहीं कह सकता क्योंकि क्रोम शायद आपके लिए तैयार होने के लिए पर्याप्त रूप से तैयार हो सकता है क्योंकि यह निर्धारित करता है कि आप उन्हें अक्सर बनाते हैं। यदि आप 'document.createElement' के साथ कोई तत्व बनाते हैं, तो इसे दस्तावेज़ में तब तक जोड़ा नहीं जाएगा जब तक कि आप स्पष्ट रूप से ऐसा नहीं करते हैं, जैसे ही आपका फ़ंक्शन यहां लौटाता है, इसमें 0 संदर्भ शेष हैं और चूंकि यह स्थानीय कार्य करता है और संदर्भित नहीं है अन्यत्र, वी 8 तुरंत इसे पुनः प्राप्त करेगा, आईआईआरसी। –

संबंधित मुद्दे