दिलचस्प पोस्ट
jquery रोक बच्चे ट्रिगर माता पिता घटना क्रोम एक्सटेंशन – DOM सामग्री प्राप्त करें "टेबल से हटाएं" के बाद सॉकेट फाईल का आकार बदलें विशेषता 'डाटा-सॉर्ट' के आधार पर Jquery में Divs सॉर्ट करें? मैं regex के साथ ओवरलैपिंग स्ट्रिंग का मिलान कैसे कर सकता हूं? जावास्क्रिप्ट और सीएसएस के साथ फीड-इन और फीड-आउट कैसे करें PHP का उपयोग करते हुए सरलतम दो-तरफ़ एन्क्रिप्शन यूनिकोडडेकोडएर्रर, अमान्य निरंतरता बाइट कैसे टॉर में पायथन के urllib2 अनुरोध बनाने के लिए? मुझे log4j.properties फ़ाइल कहां रखनी चाहिए? PHP से GET अनुरोध कैसे भेजें? डेल्फी क्या "कीवर्ड" के साथ एक खराब अभ्यास है? संग्रहीत कार्यविधि जो MYSQL में 7 दिनों से पुराने पंक्तियों को स्वचालित रूप से हटाएं एकाधिक पूर्वावलोकन के साथ AVCapture सत्र <Head> या just before </ body> जावास्क्रिप्ट?

$ .each () बनाम () लूप – और प्रदर्शन के लिए

ये मुख्यतः केवल कुछ चीजें हैं जो मैं सोच रहा था, शायद कोई मुझे उन पर थोड़ी अधिक जानकारी दे सकता है, मैं जो भी मैंने देखा है, वह उतना ही अच्छा होगा!

पहली बात मैं सोच रहा था … वहाँ कोई अंतर अच्छा है या उपयोग करने के लिए कारण है:

$('element').each(function (i, el) { });

— बनाम —

$.each($('element'), function (i, el) { });

JQuery के डॉक्स को देखकर मैं किसी एक या दूसरे के लिए कोई कविता या कारण नहीं देख सकता (शायद आप एक उदाहरण या अतिरिक्त चीजें जानते हैं जो एक दूसरे पर कर सकती हैं

लेकिन अधिक महत्वपूर्ण बात यह है कि मैं यहां गति से चिंतित हूं

 // As opposed to $.each() looping through a jQuery object // -- 8x faster for (var i = 0, $('.whatever').length; i < len; i++) { $('.whatever')[i] // do stuff } 

यदि आप इस जेएसडेलड डेमो को जांचते हैं , तो आप देखेंगे कि गति में अंतर उनमें से किसी के बराबर है, लेकिन अधिक महत्वपूर्ण बात यह है कि मुझे लगता है कि मुझे हमेशा के for() छोरों का उपयोग करना चाहिए …

मैं सिर्फ इकाई परीक्षण (5 अलग-अलग परिदृश्य फ़ंक्शंस, 50,000 बार प्रत्येक के माध्यम से पाशन) था, बस सूची मदों की एक गुच्छा के माध्यम से पाशन, और data-newAttr सेट data-newAttr , विशेष कुछ नहीं


प्रश्न :: मुझे लगता है कि मेरा सबसे बड़ा सवाल है, क्यों हमेशा एक वस्तु के माध्यम से दोहराते समय loops के लिए उपयोग नहीं करते ?? क्या $ .each () का उपयोग करने का कोई भी मुद्दा है? क्या आप हमेशा () loops के लिए उपयोग करते हैं, जब भी jQuery ऑब्जेक्ट के माध्यम से जा रहे हैं?

jsfiddle डेमो यहाँ

 Function type: Execution Time: _testArea.each() + $(this) 1947 <-- using $(this) slows it down tremendously $.each() + $(this) 1940 _testArea.each() + el(plain JS) 458 <-- using the Element speeds things up $.each() + el(plain JS) 452 for() loop + plainJS[0] iteration 236 <-- over 8x faster 

बस मेरे 2 सीटें 🙂

वेब के समाधान से एकत्रित समाधान "$ .each () बनाम () लूप – और प्रदर्शन के लिए"

एक चीज है जो। .each() आपको ऐसा करने की अनुमति देती है जो बिना किसी लूप के for किया जा सकता है।

 $('.rows').each(function(i, el) { // do something with ALL the rows }).filter('.even').each(function(i, el) { // do something with the even rows }); 

मैं अपने JSFiddle के साथ खेला जाता था यह देखने के लिए कि चेनिंग उन मामलों में प्रदर्शन को कैसे प्रभावित करेगी जहां आपको मिलान किए गए तत्वों के मूल सेट के सबसेट के माध्यम से पाश करना होगा।

नतीजा यह सब अप्रत्याशित नहीं था, हालांकि मुझे लगता है कि ओवरहेड ऑफ end() को कुछ तत्वों और कई लूपों के संयोजन के कारण यहां अतिरंजित किया गया था। इसके अलावा: सादे जेएस लूप अभी भी थोड़ी तेज़ी से हैं, लेकिन चाहे वह .each() (और चेनिंग) की अतिरिक्त पठनीयता तक .each() है, वह विवादास्पद है।

एक चीज जो आप के साथ .each() आप स्थानीय क्षेत्रीय स्कोपिंग हैं (क्योंकि आप प्रत्येक ऑब्जेक्ट के लिए एक गुमनाम समारोह का प्रयोग कर रहे हैं), जिसका बदले में इसका मतलब है कि अगर आप हर गुमनाम कार्य / क्लोजर / ईवेंट हैंडलर / आपको अपने हैंडलर के बारे में चिंता करने की ज़रूरत नहीं है। यही है, जावास्क्रिप्ट अन्य भाषाओं की तरह कार्य नहीं करता है, जब यह स्थानीय स्कोप की बात आती है, लेकिन क्योंकि आप कहीं भी एक चर की घोषणा कर सकते हैं, यह आप कभी-कभी बेवकूफी कर सकते हैं।

दूसरे शब्दों में, यह गलत है:

 var idx,el; for (idx = 0; idx <someObjectArray.length; idx++){ el = someObjectArray[idx] el.someEventHandler(function(){ alert( "this is element " + idx); }); } 

जब भी कोई भी उन वस्तुओं को इस लूप के बाद "कुछ एवेन्ट" कहता है (कृपया ध्यान दें कि इसे बनाया गया है), चेतावनी हमेशा वही कहने जा रही है जो आखिरकार idx को सौंपा गया था, जो होना चाहिए (समय के अनुसार) someObjectArray.length ;

यह सुनिश्चित करने के लिए कि आप उचित सूचकांक को बचाएं, आपको एक स्थानीय क्षेत्र को घोषित करना होगा, एक चर बनाना और उपयोग के लिए उस चर को असाइन करना होगा।

 var idx,el; for (idx = 0; idx <someObjectArray.length; idx++){ el = someObjectArray[idx]; (function(){ var localidx = idx; el.someEventHandler(function(){ alert( "this is element " + localidx); }); })(); } 

जैसा कि आप देख सकते हैं, यह नर्क के रूप में बदसूरत है, लेकिन यह काम करना चाहिए। प्रत्येक इवेंट हैंडलर को localidx की अपनी प्रति localidx

अब तुलना करें कि। .each()

 $(someObjectArray).each(function (idx, el) { el.someEventHandler(function(){ alert( "this is element " + idx); }); }); 

बहुत आसान है, है ना?

jQuery.each बनाम फॉर-लूप

लाभ jQuery.each:

  • JQuery कोड में अच्छी तरह से फिट बैठता है (चेनिंग और स्टाइल)
  • गुंजाइश के बारे में कोई चिंता नहीं (आईटरेटर और ऑब्जेक्ट के संदर्भ लगातार जारी रहेंगे)।
  • सार्वभौमिक रूप से इस्तेमाल किया जा सकता है (ऑब्जेक्ट की सभी वस्तुओं के लिए और ऑब्जेक्ट की ओर इशारा करते हुए)

लूप के फायदे:

  • उच्च प्रदर्शन (गेम / एनिमेशन / बड़े डेटासेट के लिए)
  • इटरेटर पर पूर्ण नियंत्रण (आइटम छोड़ें, सूची से बांट आइटम आदि)।
  • लूप हमेशा काम करेगा, क्योंकि jQuery पर कोई निर्भरता नहीं है।
  • अधिकांश अन्य समान भाषाओं के समान परिचित वाक्य रचना

उदाहरण कोड

यह उदाहरण कोड है कि मैं एक सूची पर पुनरावृत्त कैसे करना पसंद करता हूं

 var list = ['a', 'b', 'c', 'd', 'e', 'f']; 

jQuery.each:

 $.each(list, function(i, v) { // code... }); 

बिना बंद के लिए पाश:

 for(var i=0,v,n=list.length;i<n;i+=1) { v = list[i]; // code... } 

बंद के साथ-पाश के लिए:

 for(var i=0,n=list.length;i<n;i+=1) { (function(i, v) { // code... })(i, list[i]); } 

ध्यान दें: मेरा सुझाव है कि आप केवल मानक फॉर-लूप का उपयोग करें, और आवश्यक होने पर केवल एक बंद का उपयोग करें हालांकि, जब आपका कोड जावास्क्रिप्ट की तुलना में किसी भी तरह jQuery की तरह दिखाई देता है, तो यह केवल $.each उपयोग करना आसान हो सकता है। प्रदर्शन समस्याओं के मामले में, आप बाद में इसे हमेशा बाद में देख सकते हैं

जब मैं आपकी लिंक पर गया तो दो नंबर मिलते हैं I

 $.each() + el(plain JS) 401 for() loop + plainJS[0] iteration 377 

यदि अंतर उस छोटे से है, तो सबसे अधिक पठनीय है, लेकिन, अगर आप बहुत अधिक समय की आवश्यकताओं के साथ है, तो आप बस सबसे तेजी से होने समाप्त होता है के साथ जाने की जरूरत हो सकती है, जो एक के साथ जाओ।

मैं आपको सुझाव देता हूं कि आप अपने प्रोग्राम को तीन अलग-अलग तरीकों, ऊपर दो, और फिर जावास्क्रिप्ट के नए संस्करणों में पाए जाने वाले foreach का उपयोग करने के लिए लिखते हैं, और उन ब्राउज़रों के लिए जो इसका समर्थन नहीं करते हैं, आप इसे प्रोटोटाइप के रूप में जोड़ सकते हैं।

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/forEach

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

आपके पहले प्रश्न के लिए, मैं $('element').each साथ जाना होगा $('element').each रूप में यह पढ़ने के लिए बहुत आसान है, लेकिन यह सिर्फ मेरी राय है।

जब मैंने पहले कुछ सरल प्रदर्शन परीक्षण किया था http://jsperf.com/forloops3 लगता है कि सादे से चिपके हुए, for loop पुराने (जहां यह संभव है) जाने का रास्ता है 🙂

वास्तव में $ .euch () और $ () के बीच एक बड़ा अंतर है। प्रत्येक ()

वे जो कुछ आप में गुजर रहे हैं उसके आधार पर कुछ अलग चीजें करते हैं।

http://api.jquery.com/each/ बनाम http://api.jquery.com/jquery.each/

jquery.each एक सामान्य इटरेटर है, जहां $ ()। प्रत्येक () एक jquery संग्रह के लिए विशिष्ट है।

यह भी देखें: http://jsperf.com/each-vs-each-vs-for-in/9