मेरे पास एक घटना है, जो खुद को आग लग सकती है। मैं कोड को यथासंभव कुशल बनाने की कोशिश करता हूं, लेकिन यह कुछ परिस्थितियों में अधिकतम कॉल स्टैक को मार सकता है, जो मेरे नियंत्रण से बाहर हैं। यह एक अनंत ढेर नहीं है और यह किसी बिंदु पर समाप्त हो जाएगा, लेकिन कभी-कभी यह सीमा के कारण खत्म होने से पहले संभावित रूप से क्रैश कर सकता है।जावास्क्रिप्ट में अधिकतम कॉल स्टैक कैसे बढ़ाएं?
यदि मैं 2 समान ईवेंट श्रोताओं को सेट करता हूं और कोड को विभाजित करता हूं तो क्या मैं कॉल स्टैक की संख्या बढ़ा दूंगा? या मैं क्या कर सकता हूँ?
अद्यतन: यह डीओएम परिवर्तन घटना (केवल वेबकिट के साथ काम करना, इसलिए अन्य ब्राउज़रों के बारे में परवाह नहीं है) पर है, जो कुछ स्थितियों के आधार पर डीओएम को भी संशोधित कर सकता है। मैंने अभी तक उस सीमा को वास्तव में नहीं मारा है, लेकिन सिद्धांत रूप से, यह संभावित रूप से कर सकता है। मैं अभी भी जितना संभव हो उतना कम डोम मैनिप्लेशंस बनाने के लिए कोड को अनुकूलित कर रहा हूं।
अद्यतन 2: मैं नमूना शामिल कर रहा हूँ (नहीं असली) उदाहरण:
document.addEventListener('DOMSubtreeModified', function(event){
this.applyPolicy(event);
}, true);
function applyPolicy(event){
if(typeof event != "undefined"){
event.stopPropagation();
event.stopImmediatePropagation();
}
if(!isButtonAllowed){
$('button:not(:disabled)').each(function(){
$(this).attr('disabled', true);
});
}
}
यह सिर्फ एक नमूना कोड है, लेकिन फिर भी इस मामले में, बटन के 100s कहना जब आपके पास, कॉल ढेर 100 में भी होगा। ध्यान दें कि यदि आप $('button').attr('disabled', true);
का उपयोग करते हैं, तो यह कॉल स्टैक समस्या का कारण बन जाएगा, क्योंकि jQuery डीओएम को असीमित रूप से संशोधित करने का प्रयास करेगा।
शायद आपको अपने रिकर्सिव फ़ंक्शन को '' जबकि 'लूप में परिवर्तित करना चाहिए? मैं कल्पना नहीं कर सकता कि आपको कुछ अन्य फ़ंक्शन को आग लगाने के लिए वास्तविक सैकड़ों हजारों ईवेंट ट्रिगर्स के दुष्प्रभाव की आवश्यकता है ... –
कभी भी उस सीमा तक नहीं पहुंचा, अगर ग़लत रूप से अनंत-लूप को कोडिंग नहीं किया जाता है। कोड दिखाएं .. – gpasci
संक्षिप्त उत्तर: ऐसा करने के लिए कोई (मानक) तंत्र नहीं है। तब एकमात्र विकल्प कोड को बदलना है। –