दिलचस्प पोस्ट
एक मर्ज किए गए शब्दकोश में मर्ज किए गए शब्दकोश जोड़ना NSDateFormatter: वर्तमान के अनुसार तिथि वर्ष, बिना साल नेटबीन्स में जार फ़ाइल कैसे बनाएं आईपैड पॉपओवर की तरह आईफोन पॉपअप मेनू? PHP: अपने मानों की लंबाई से एक सरणी क्रमित करें? जरूरत पड़ने पर निर्भरता बनाने के लिए XCode 4 कार्यस्थान को कॉन्फ़िगर करने का सही तरीका क्या है? ग्राहक का आईपी पता प्राप्त करना DataContract / DataMember विशेषताओं को अनदेखा करने के लिए JSON.NET कॉन्फ़िगर करें क्या सीएमडी.एक्सए के लिए उपयोगिता है? CSS3 ट्रांसव्यू स्क्यू एक साइड अंत में ब्लॉक में अपवाद फेंकता त्रुटि आईटीएमएस – 90167 नंबर एप बंडलों को पैकेज में मिला असंगत वर्ण एन्कोडिंग: एएससीआईआई -8 बीआईटी और यूटीएफ -8 मेरी वेबसाइट पर एडब्लॉक को कैसे निकालना है? WPF में कस्टम कर्सर?

अधिकतम कॉल स्टैक आकार त्रुटि से अधिक हो गया

मैं एक डायरेक्ट वेब रिमोटिंग (डीडब्ल्यूआर) जावास्क्रिप्ट लाइब्रेरी फ़ाइल का उपयोग कर रहा हूं और केवल सफारी (डेस्कटॉप और आईपैड) में एक त्रुटि प्राप्त कर रहा हूं

इसे कहते हैं

अधिकतम कॉल स्टैक आकार से अधिक।

इस त्रुटि का क्या अर्थ है और क्या यह पूरी तरह से प्रसंस्करण बंद कर देता है?

Safari ब्राउज़र के लिए भी कोई फिक्स (वास्तव में iPad Safari , यह कहते हैं

जेएस: निष्पादन कालबाह्य हो गया

जो मैं मान रहा हूँ एक ही कॉल स्टैक समस्या है)

Solutions Collecting From Web of "अधिकतम कॉल स्टैक आकार त्रुटि से अधिक हो गया"

इसका मतलब है कि कहीं कहीं आपके कोड में, आप एक फ़ंक्शन बुला रहे हैं जो बदले में एक और फ़ंक्शन कॉल करता है और आगे, जब तक आप कॉल स्टैक सीमा को नहीं मारते

यह लगभग हमेशा एक बेस केस के साथ रिकर्सिव फ़ंक्शन की वजह से होता है जो कि पूरा नहीं हो रहा है।

स्टैक देखना

इस कोड पर विचार करें …

 (function a() { a(); })(); 

मुट्ठी भर कॉल के बाद यह स्टैक है …

वेब इंस्पेक्टर

जैसा कि आप देख सकते हैं, कॉल स्टैक तब तक बढ़ता है जब तक यह एक सीमा तक नहीं चला जाता है: ब्राउज़र हार्डकोड स्टैक आकार या स्मृति थकावट।

इसे ठीक करने के लिए, यह सुनिश्चित करें कि आपके रिकर्सिव फ़ंक्शन का आधार केस होता है जिसे पूरा किया जा सकता है …

 (function a(x) { // The following condition // is the base case. if ( ! x) { return; } a(--x); })(10); 

आप कभी-कभी इसे प्राप्त कर सकते हैं यदि आप गलती से एक ही जेएस फ़ाइल को दो बार आयात / एम्बेड कर सकते हैं, निरीक्षक के अपने संसाधन टैब में जांच के लिए 🙂

आपके कोड में एक रिकर्सिव पाश कहीं है (यानी ऐसा फ़ंक्शन जो अंततः फिर से बार-बार कॉल करता है जब तक कि स्टैक पूर्ण न हो)।

अन्य ब्राउज़रों में या तो बड़े स्टैक होते हैं (इसलिए आपको इसके बजाय समय-समय का समय मिलता है) या वे किसी कारण के लिए त्रुटि को निगलते हैं (शायद बुरी तरह से रखा गया प्रयास-पकड़)।

त्रुटि होने पर कॉल स्टैक की जांच करने के लिए डीबगर का उपयोग करें

मेरे मामले में, मैं अपने मूल्यों के बजाय इनपुट तत्व भेज रहा था:

 $.post( '',{ registerName: $('#registerName') } ) 

के बजाय:

 $.post( '',{ registerName: $('#registerName').val() } ) 

यह मेरे क्रोम टैब को एक बिंदु पर स्थिर कर दिया गया था, जिसने मुझे पृष्ठ के अनुत्तरदायी होने के लिए 'प्रतीक्षा / मार' संवाद भी दिखाया था …

मेरे मामले में, मैं एक बड़े बाइट सरणी को एक स्ट्रिंग में परिवर्तित कर रहा था जो निम्न का उपयोग करता है:

 String.fromCharCode.apply(null, new Uint16Array(bytes)) 

bytes में कई लाख प्रविष्टियां थीं, जो स्टैक पर फिट होने के लिए बहुत बड़ी है।

क्रोम देव उपकरण पट्टी कंसोल में त्रुटि विवरण की जाँच करें, यह आपको कॉल स्टैक में कार्य देगा, और आपको उस त्रुटि के कारण पुनरावर्ती की ओर मार्गदर्शन करेगा।

अगर आपको किसी कारण के लिए अनन्त प्रक्रिया / पुनरावर्ती चलाने की आवश्यकता है, तो आप अलग-अलग थ्रेड में वेबवर्कर का उपयोग कर सकते हैं। http://www.html5rocks.com/en/tutorials/workers/basics/

अगर आप डोम तत्वों और हेडल करना चाहते हैं, एनीमेशन का उपयोग करें http://creativejs.com/resources/requestanimationframe/

मेरे मामले में क्लिक करें घटना बच्चे तत्व पर प्रचार कर रहा था। तो, मुझे डाल देना था

e.stopProgration ()

क्लिक ईवेंट पर

  $(document).on("click", ".remove-discount-button", function (e) { e.stopPropagation(); //some code }); $(document).on("click", ".current-code", function () { $('.remove-discount-button').trigger("click"); }); 

यहाँ html कोड है

  <div class="current-code"> <input type="submit" name="removediscountcouponcode" value=" title="Remove" class="remove-discount-button"> </div> 

Stackoverflows का पता लगाने में समस्या कभी-कभी स्टैक ट्रेस खोलना होता है और आप वास्तव में देख रहे हैं कि वास्तव में क्या चल रहा है।

मुझे क्रोम के नए डीबगिंग टूल के लिए कुछ उपयोगी पाया है।

Performance tab मारो, सुनिश्चित करें कि Javascript samples सक्षम हैं और आप इस तरह से कुछ प्राप्त करेंगे।

यह बहुत स्पष्ट है जहां ओवरफ़्लो यहां है! यदि आप extendObject पर क्लिक करते हैं extendObject आप वास्तव में कोड में सटीक रेखा संख्या देख पाएंगे।

यहां छवि विवरण दर्ज करें

आप ऐसे समय भी देख सकते हैं जो सहायक हो सकता है या नहीं हो सकता है या एक लाल हेरिंग

यहां छवि विवरण दर्ज करें


एक और उपयोगी चाल अगर आपको वास्तव में समस्या नहीं मिल पाती है तो आपको कई console.log बयान देना है, जहां आपको लगता है कि समस्या है उपरोक्त पिछले चरण में आप इस के साथ मदद कर सकते हैं।

क्रोम में यदि आप बार-बार समान डेटा आउटपुट करते हैं तो यह इसे दिखाएगा कि यह समस्या अधिक स्पष्ट रूप से कहां दिखाई देगी। इस उदाहरण में स्टैक 7152 फ़्रेमों को आखिरकार दुर्घटनाग्रस्त होने से पहले मारा गया था:

यहां छवि विवरण दर्ज करें

नीचे दिए गए समान कोड के दोनों इनवोकेशन, यदि मेरे कंप्यूटर पर क्रोम 32 में 1 काम की कमी हुई है, जैसे 17905 बनाम 17 9 04. यदि रनों के रूप में चलाया जाता है तो वे "रेंजएर्रर: अधिकतम कॉल स्टैक आकार से अधिक हो जाएगा" यह प्रतीत होता है कि यह सीमा कठोर नहीं है लेकिन आपकी मशीन के हार्डवेयर पर निर्भर है। यह प्रकट होता है कि यदि फ़ंक्शन के रूप में लागू किया जाता है तो यह स्वयं लगाया गया सीमा एक विधि के रूप में लागू होने से अधिक है यानी यह विशेष कोड फ़ंक्शन के रूप में उपयोग किए जाने पर कम स्मृति का उपयोग करता है।

एक विधि के रूप में शामिल:

 var ninja = { chirp: function(n) { return n > 1 ? ninja.chirp(n-1) + "-chirp" : "chirp"; } }; ninja.chirp(17905); 

फ़ंक्शन के रूप में शामिल किया गया:

 function chirp(n) { return n > 1 ? chirp( n - 1 ) + "-chirp" : "chirp"; } chirp(20889); 

मेरे मामले में, दो jQuery के modals प्रत्येक दूसरे के ऊपर स्टैक्ड दिखा रहे थे। मेरी समस्या हल करने से रोकना

आप क्रोम ब्राउज़र में अपना रिकर्सिव फ़ंक्शन पा सकते हैं, ctrl + shift + j दबा सकते हैं और फिर स्रोत टैब, जो आपको कोड संकलन प्रवाह देता है और आप कोड में ब्रेक पॉइंट का उपयोग कर पा सकते हैं।

मुझे यहां भी इसी तरह की समस्या का सामना करना पड़ा है ड्रॉपडाउन लोगो अपलोड बॉक्स का उपयोग करते हुए लोगो को अपलोड करते समय यह विवरण दिया गया है

 <div> <div class="uploader greyLogoBox" id="uploader" flex="64" onclick="$('#filePhoto').click()"> <img id="imageBox" src="{{ $ctrl.companyLogoUrl }}" alt=""/> <input type="file" name="userprofile_picture" id="filePhoto" ngf-select="$ctrl.createUploadLogoRequest()"/> <md-icon ng-if="!$ctrl.isLogoPresent" class="upload-icon" md-font-set="material-icons">cloud_upload</md-icon> <div ng-if="!$ctrl.isLogoPresent" class="text">Drag and drop a file here, or click to upload</div> </div> <script type="text/javascript"> var imageLoader = document.getElementById('filePhoto'); imageLoader.addEventListener('change', handleImage, false); function handleImage(e) { var reader = new FileReader(); reader.onload = function (event) { $('.uploader img').attr('src',event.target.result); } reader.readAsDataURL(e.target.files[0]); } </script> </div> 

CSS.css

 .uploader { position:relative; overflow:hidden; height:100px; max-width: 75%; margin: auto; text-align: center; img{ max-width: 464px; max-height: 100px; z-index:1; border:none; } .drag-drop-zone { background: rgba(0, 0, 0, 0.04); border: 1px solid rgba(0, 0, 0, 0.12); padding: 32px; } } .uploader img{ max-width: 464px; max-height: 100px; z-index:1; border:none; } .greyLogoBox { width: 100%; background: #EBEBEB; border: 1px solid #D7D7D7; text-align: center; height: 100px; padding-top: 22px; box-sizing: border-box; } #filePhoto{ position:absolute; width:464px; height:100px; left:0; top:0; z-index:2; opacity:0; cursor:pointer; } 

सुधार करने से पहले मेरा कोड था:

 function handleImage(e) { var reader = new FileReader(); reader.onload = function (event) { onclick="$('#filePhoto').click()" $('.uploader img').attr('src',event.target.result); } reader.readAsDataURL(e.target.files[0]); } 

कंसोल में त्रुटि:

यहां छवि विवरण दर्ज करें

मैंने इसे onclick="$('#filePhoto').click()" को हटा कर हल किया onclick="$('#filePhoto').click()" div टैग से onclick="$('#filePhoto').click()"

मुझे एक ऐसी समस्या का सामना करना पड़ रहा था जिसमे मैंने एक फ़ील्ड नाम निकाल कर इसे हल कर लिया है जिसका उपयोग एजेक्स पर दो बार किया गया था

  jQuery.ajax({ url : '/search-result', data : { searchField : searchField, searchFieldValue : searchField, nid : nid, indexName : indexName, indexType : indexType }, .....