केली उदाहरण एसिंक्रोनस घटनाओं द्वारा डेटा (कब इतना बड़ा है) को तोड़ने के बारे में है और ईवेंट लूप कतार में ईवेंट इंटरलीव करता है, वह हिस्सा मुझे नहीं मिला:

पुस्तक से उदाहरण:

var res = [];
// `response(..)` receives array of results from the Ajax call
function response(data) {

   var chunk = data.splice( 0, 1000 );

   res = res.concat(

    chunk.map( function(val){
      return val * 2;
    } )
  );

  if (data.length > 0) {

    setTimeout( function(){
        response( data );
    }, 0 );
  }
}
// ajax(..) is some arbitrary Ajax function given by a library
ajax( "http://some.url.1", response );
ajax( "http://some.url.2", response );

मुझे वह हिस्सा नहीं मिला, मेरा दिमाग यह स्वीकार नहीं कर सकता कि इससे कोड बेहतर प्रदर्शन कर सकता है, क्या इससे दो सरणी से डेटा इंटरलीव नहीं होगा, या मुझे समझ में नहीं आता कि इवेंट लूप कैसे काम करता है ??

5
Saher Elgendy 30 अक्टूबर 2019, 14:38

1 उत्तर

सबसे बढ़िया उत्तर

ऐसा प्रतीत होता है कि आप सही हैं कि एकाधिक अजाक्स कॉल के साथ डेटा के गलत क्रम में होने की संभावना है (और यह आपके लिए नोटिस करने के लिए बहुत ही चतुर था, +1), पोस्ट किए गए कोड के साथ आप प्राप्त कर सकते हैं:

  1. अजाक्स कॉल 1 शुरू होता है
  2. अजाक्स कॉल 1 खत्म
  3. कॉल 1 . से पहले 1000 तत्वों को जोड़ें
  4. अजाक्स कॉल 2 शुरू होता है
  5. कॉल 1 . से अगले 1000 तत्वों को जोड़ें
  6. अजाक्स कॉल 2 खत्म
  7. कॉल 2 . से पहले 1000 तत्वों को जोड़ें
  8. कॉल 1 . से अगले 1000 तत्वों को जोड़ें

प्रश्न के प्रदर्शन पहलू के लिए, याद रखें कि 'प्रदर्शन' केवल एक चीज नहीं है। यदि प्रदर्शन से आपका मतलब है 'कोड के इस ब्लॉक को चलने में कितना समय लगता है' तो चंकिंग से प्रदर्शन खराब होगा। लेकिन यह फ्रंटएंड है। 'प्रदर्शन' वास्तव में उपयोगकर्ता अनुभव के बारे में है, और आपका जावास्क्रिप्ट कोड मुख्य धागे पर चलता है। यदि आपके पास 10 सेकंड का ऑपरेशन है तो आपका UI 10 सेकंड के लिए अनुत्तरदायी है। यदि आप इसे खंडित करते हैं तो उपयोगकर्ता अभी भी पृष्ठ के साथ बातचीत कर सकता है, भले ही इसे पूरा करने में थोड़ा अधिक समय लगे।

3
Jared Smith 30 अक्टूबर 2019, 13:41