दिलचस्प पोस्ट
UINavigationBar में बाईं ओर रिक्त स्थान रिक्त स्थान कैसे संपादित करें, सही UIBarButtonItem जावा में ऑपरेटर ओवरलोडिंग आप web.xml में अपने <web-app> टैग्स में रूट संदर्भ कैसे निर्दिष्ट करते हैं? एंड्रॉइड के लिए स्थानीय चित्र कैशिंग समाधान: स्क्वायर पिकासो vs यूनिवर्सल इमेज लोडर मैं एक सदिश में एक अनूठा_पीटर को क्यों नहीं ला सकता हूं? क्या मैं अनाम रूपों को XML के रूप में सीरियल कर सकता हूँ? MVVM लाइट टूलकिट का उपयोग करके नई विंडो कैसे खोलें जावा में मेरे राउटर / गेटवे का आईपी कैसे तय कर सकता हूं? एंड्रॉइड के साथ एक मनमाना टोन बजाना ऐनिमेशन को नष्ट किए बिना एनिमेटेड GIF फ़ाइल का आकार बदलें $ रूटस्स्कोप। $ प्रसारण बनाम $ दायरा। $ emit प्रामाणिक बनाम गैर-कैनोनिकल टर्मिनल इनपुट पीडीएफ फ़ाइल अपलोड करना कैसे जावा में एक 2 रास्ता नक्शा बनाने के लिए फ़ंक्शन संकेतक के रूप में कैप्चर के साथ सी ++ लैम्ब्डा

गहन जावास्क्रिप्ट संसाधन के दौरान मैं ब्राउज़र को कैसे वापस (संक्षिप्त) देता हूं?

मैंने गेट डोम प्रसंस्करण (जावास्क्रिप्ट) के उपयोग के दौरान सेटटाइमआउट () का इस्तेमाल करने के बारे में यहां पोस्ट पढ़ी है, लेकिन मैं नीचे दिए गए कोड के साथ इस फ़ंक्शन को कैसे एकीकृत कर सकता हूं? नीचे दिए गए कोड छोटे विकल्पों के लिए ठीक काम करता है, लेकिन जब विकल्पों की संख्या बहुत बड़ी हो जाती है तो मेरी "कृपया प्रतीक्षा करें" एनिमेटेड जीआईएफ फ्रीज होता है, जबकि स्थानीय जावास्क्रिप्ट प्रोसेसिंग होता है। धन्यवाद!

function appendToSelect() { $("#mySelect").children().remove() ; $("#mySelect").html( '<option selected value="' + obj.data[0].value + '">' + obj.data[0].name + '</option>' ); var j = 1 ; for (var i = 1; i < obj.data.length; i++) { $("#mySelect").append( '<option value="' + obj.data[i].value + '">' + obj.data[i].name + '</option>' ); } } 

वेब के समाधान से एकत्रित समाधान "गहन जावास्क्रिप्ट संसाधन के दौरान मैं ब्राउज़र को कैसे वापस (संक्षिप्त) देता हूं?"

यहां एक समाधान है:

 function appendToSelect() { $("#mySelect").children().remove(); $("#mySelect").html( '<option selected value="'+obj.data[0].value+'">' + obj.data[0].name + '</option>' ); obj.data.splice(0, 1); // we only want remaining data var appendOptions = function() { var dataChunk = obj.data.splice(0, 10); // configure this last number (the size of the 'chunk') to suit your needs for(var i = 0; i < dataChunk.length; i++) { $("#mySelect").append( '<option value="' + dataChunk[i].value + '">' + dataChunk[i].name + '</option>' ); } if(obj.data.length > 0) { setTimeout(appendOptions, 100); // change time to suit needs } }; appendOptions(); // kicks it off } 

@ बोर्गर के समाधान के रूप में उतना ही सुरुचिपूर्ण नहीं है, लेकिन आपको यह विचार मिलता है। असल में, मैं एक ही काम कर रहा हूं, परन्तु सभी एक समारोह में इसे तोड़ने के बजाय एक उच्च-ऑर्डर फ़ंक्शन जैसे कि वह करता है। मुझे उसका समाधान पसंद है, लेकिन अगर आप नहीं करते हैं, तो शायद यह आपके लिए काम करेगा।


संपादित करें: उन लोगों के लिए जो तुरंत इसे नहीं देखते हैं, इस समाधान और @ बोरार के बीच मुख्य मतभेदों में से एक यह है कि यह समाधान आपको प्रत्येक समयावधि के बीच संसाधित किए गए डेटा के 'विखंडू' के आकार को सेट करने की अनुमति देता है @ बोरार के टाइम-आउट के बाद सरणी के प्रत्येक सदस्य पर कार्रवाई की जाती है। अगर मुझे समय लगता है, तो मैं इसे संभाल करने के लिए एक उच्च-आदेश फ़ंक्शन बनाने का प्रयास करूँगा, ताकि यह अधिक सुरुचिपूर्ण हो। हालांकि कोई वादा नहीं! 😉


संपादित करें: तो, मेरा @ बोर्गर के समाधान का अनुकूलन है, जो एक 'चक' आकार को सेट करने और समय-सीमा का मूल्य अधिक आसानी से कॉन्फ़िगर करने की अनुमति देता है:

 function incrementallyProcess(workerCallback, data, chunkSize, timeout, completionCallback) { var itemIndex = 0; (function() { var remainingDataLength = (data.length - itemIndex); var currentChunkSize = (remainingDataLength >= chunkSize) ? chunkSize : remainingDataLength; if(itemIndex < data.length) { while(currentChunkSize--) { workerCallback(data[itemIndex++]); } setTimeout(arguments.callee, timeout); } else if(completionCallback) { completionCallback(); } })(); } function appendToSelect() { $("#mySelect").children().remove(); $("#mySelect").html( '<option selected value="' + obj.data[0].value + '">' + obj.data[0].name + '</option>' ); obj.data.splice(0,1); // we only want remaining data incrementallyProcess(function(data) { $("#mySelect").append( '<option value="' + data.value + '">' + data.name + '</option>' ); }, obj.data, 10, 100, removeAnimatedGifFunction); // last function not required... } 

उम्मीद है कि मदद करता है – मुझे लगता है कि यह दोनों समाधानों का सबसे अच्छा संयोजन है नोटिस , दूसरा अनाम फ़ंक्शन अब अनुक्रमणिका मान का उपयोग नहीं करता है, लेकिन केवल संपूर्ण ऑब्जेक्ट (मान और नाम गुणों के साथ) से गुजरता है; यह थोड़ा क्लीनर बनाता है, चूंकि मौजूदा ऑब्जेक्ट का सूचक वास्तव में आम तौर पर उपयोगी नहीं होता है, जब आईएमओ चीजों पर काम करता है।

मुझे यकीन है कि अभी भी ऐसी चीजें हैं जो इसे बेहतर बनाने के लिए किया जा सकता है, लेकिन यह पाठक के लिए एक कवायद के रूप में छोड़ दिया गया है। 😉

यह सिर्फ ऐसा होता है कि मैं इसके बारे में एक पल पहले पोस्ट कर रहा था। यहां एक समयबद्ध पाश फ़ंक्शन है:

 function processLoop( actionFunc, numTimes, doneFunc ) { var i = 0; var f = function () { if (i < numTimes) { actionFunc( i++ ); // closure on i setTimeout( f, 10 ) } else if (doneFunc) { doneFunc(); } }; f(); } 

आपकी स्थिति के लिए यह इस तरह प्रयोग किया जाएगा:

 function appendToSelect () { $("#mySelect").children().remove() ; $("#mySelect").html( '<option selected value="' + obj.data[0].value + '">' + obj.data[0].name + '</option>' ); var j = 1 ; processLoop(function (i){ $("#mySelect").append( '<option value="' + obj.data[i].value + '">' + obj.data[i].name + '</option>' ); }, obj.data.length); } 

आप यह सुनिश्चित करना चाहते हैं कि आपके पास थ्रेशन फ़ंक्शन के भीतर obj चर के लिए एक बंद या कुछ अन्य पहुंच है।

उम्मीद है की यह मदद करेगा।

यदि आपको सरलता की आवश्यकता है, तो मैंने एसिंक्रोनस लूप के लेखन को कम करने के लिए एक jQuery प्लगइन लिखा है: jQuery के Async

प्लगइन का उपयोग करके, आपके कोड को फिर से लिखा जा सकता है:

 function appendToSelect() { $("#mySelect").children().remove() ; $("#mySelect").html( '<option selected value="' + obj.data[0].value + '">' + obj.data[0].name + '</option>' ); ///////////////////////////// var i = 1; $.whileAsync({ test: function(){ i < obj.data.length; } loop: function() { $("#mySelect").append( '<option value="' + obj.data[i].value + '">' + obj.data[i].name + '</option>' ); i++; } }); ///////////////////////////// } 

जवाबदेही की मदद करनी चाहिए अधिक नियंत्रण के लिए 'बल्क' और 'देरी' विकल्प को टैप करें।

आपको तत्व सूची को कैश करने के लिए फ़ंक्शन को फिर से लिखना होगा, फिर किसी प्रकार के काउंटर का उपयोग करके सूची पर लूप।

तब जब काउंटर प्रति घंटा% max_num_before_wait == 0 तक पहुंचता है, कॉल आउटआउट फ़ंक्शन पर स्वयं वापस करें

पूर्ण सूची के अंत में कैश और काउंटर को साफ़ करने के लिए सुनिश्चित करें, या अतिरिक्त गणना पैरामीटर के साथ एक द्वितीयक फ़ंक्शन का उपयोग करें।