मेरे पास एक ऐप है जो बटन क्लिक करने के बाद वेब कार्यकर्ता को कॉल करता है। यूआई को राहत देने के लिए गणना को कार्यकर्ता में स्थानांतरित किया जाता है और गणना के दौरान इसे उपयोगकर्ता क्रियाओं के प्रति उत्तरदायी बना दिया जाता है।वेब श्रमिकों (कचरा कलेक्टर) का उपयोग कर संभावित मेमोरी लीक
सब कुछ ठीक हो जाता है और लगभग 0.8-1.5 के बाद कर्मचारी प्रतिक्रिया भेजता है। Work.onmessage में मैं सभी आवश्यक डीओएम क्रियाएं करता हूं। लेकिन इस जीसी के बाद सीपीयू के आधार पर 2 या अधिक सेकंड के लिए यूआई को व्यावहारिक रूप से अवरुद्ध करता है। यह वास्तव में मुझे भ्रमित कर रहा है, क्योंकि यूआई अवरोधन वह है जिसे मैं रोकना चाहता हूं।
यहाँ समय/स्मृति कंसोल टैब के स्क्रीनशॉट: http://i.imgur.com/zUoHa.jpg
आप देख सकते हैं जीसी घटनाओं बस सभी डोम जोड़तोड़ के बाद होते हैं। दरअसल केवल एक ही पश्चाताप घटना होती है (दस्तावेज़फ्रेगमेंट का उपयोग किया जाता है)।
मुख्य js कोड:
var sortWorker = new Worker('js/contactsorter.js');
sortWorker.onmessage = function(e) {
var messages = [];
e.data.forEach(function(userDoc) {
var contactSection = _drawContact(userDoc);
messages.push(contactSection);
});
meta.append(messages); // this actually appends document fragment as a child
};
sortWorker.postMessage(postMessageData);
contactsorter.js (कार्यकर्ता):
onmessage = function(e) {
var uid, output = [], usersStat = {};
// calculations...
postMessage(output);
close();
};
वहाँ किसी भी तरह से इस जगह में है या नहीं इन जीसी घटनाओं से बचने के लिए है?
यूपीडी: ऐसा लगता है कि जीसी घटना समय कार्यकर्ता को भेजी गई डेटा राशि पर निर्भर करता है। यूपीडी 2: शटडाउन और बूट जीसी घटनाओं के बाद एक बार से कम के लिए यूआई को अवरुद्ध करने के लिए केवल दो बार होता है। हम्म?
ऑब्जेक्ट्स कितने बड़े हैं? कितने? हम किस तरह की संख्या बोल रहे हैं? आप क्या डोम नोड बना रहे हैं? क्रमबद्ध संपर्कों की संख्या के साथ जीसी घटना पैमाने पर रैखिक रूप से करें? –
JSON.stringify का कहना है कि यह लगभग 2 एम है। ये वे वस्तुएं हैं जिनके सामान उनके बच्चों के रूप में हैं। कार्यकर्ता प्रतिक्रिया के बाद (यह एक सरणी आउटपुट करता है) मैं दस्तावेज़फ्रेगमेंट बनाता हूं और लगभग जोड़ता हूं। इसके लिए 400 "div" तत्व। बाद में मैं डीओएम को टुकड़ा जोड़ता हूं। अंतिम प्रश्न के बारे में - मुझे परीक्षण करने के लिए अपने कोड को फिर से लिखना होगा, इसलिए मैं इसे थोड़ी देर बाद टिप्पणी करूंगा।बीटीडब्ल्यू: नया यूपीडी –
अंतिम प्रश्न के बारे में: नहीं, जीसी घटना डेटा राशि के हिसाब से स्केल नहीं करती है। इसके अलावा, मैं इसे समयरेखा http://i.imgur.com/psGpr.png पर भी नहीं ढूंढ सकता, हालांकि इस अवधि के लिए यूआई की घड़ी देखी जा रही है। –