दिलचस्प पोस्ट
वास्तव में जावा ईई क्या है? गिट रिपॉजिटरी में किसी विशिष्ट लेखक द्वारा लिखित कुल लाइनों की गणना कैसे करें? सीएसएस गुण: प्रदर्शन बनाम दृश्यता क्या आइए का आकार कंपाइलर और / या प्रोसेसर पर निर्भर करता है? मैं एंड्रॉइड पर जीपीएस प्रोग्रामेटिक रूप से कैसे सक्षम या अक्षम कर सकता हूं? Driver.getConnection SQLServer ड्राइवर और जावा 1.6.0_2 9 का उपयोग कर लटकता है onSaveInstanceState () और onRestoreInstanceState () डीबग और रिलीज में दृश्य स्टूडियो के बीच क्या अंतर है? JSON से जावा वर्ग उत्पन्न करें? बहुआयामी सरणी और सी # में एरे की एक सरणी के बीच अंतर क्या हैं? किसी तालिका के लिए मौजूदा AUTO_INCREMENT मान प्राप्त करें कॉमा ऑपरेटर क्या करता है? पंक्तियों के लिए डायनामिक कॉलम ट्रांसपोज़िंग MySQL डाटाबेस के साथ पायथन 3.4.0 फ़ॉर्मेट नंबर जैसे स्टैक ओवरफ़्लो (हजारों लोगों के लिए किफ़ास्ट के साथ गोल)

Jquery live () बनाम प्रतिनिधि ()

मैंने कुछ पोस्ट यहां और कहीं और वेब पर live() और delegate() बीच अंतर के बारे में पढ़ा है। हालांकि मुझे उस उत्तर का पता नहीं लगा है जो मैं देख रहा हूं (यदि यह एक शिकार है तो कृपया मुझे बताएं)

मुझे पता है कि live और delegate बीच का अंतर यह है कि delegate का उपयोग किसी श्रृंखला में नहीं किया जा सकता है मैंने यह भी कहीं पढ़ा है कि delegate कुछ मामलों में तेजी से (बेहतर प्रदर्शन) है

मेरा प्रश्न यह है, क्या ऐसी कोई स्थिति है जहां आपको delegate बजाए live उपयोग करना चाहिए?

अद्यतन करें

मैंने प्रदर्शन में अंतर देखने के लिए एक साधारण परीक्षण किया है

मैंने नया भी जोड़ा है .on() जो jQuery 1.7+ में उपलब्ध है

परिणामों में बहुत अधिक प्रदर्शन के मुद्दों का सारांश दिया गया है जैसा कि जवाब में बताया गया है।

  • .delegate() उपयोग न करें जब तक कि आपके jQuery संस्करण का समर्थन नहीं करता। .delegate()
  • का प्रयोग न करें .delegate() जब तक कि आपके jQuery संस्करण का समर्थन नहीं करता .delegate()

.delegate() .live() और .delegate() में अंतर delegate() और .delegate() बीच की तुलना में बहुत बड़ा है।

वेब के समाधान से एकत्रित समाधान "Jquery live () बनाम प्रतिनिधि ()"

मैं कभी भी live नहीं हूं; मैं delegate के उपयोग के लाभों पर विचार करता हूं ताकि भारी होने के लिए पर्याप्त हो।

live का एक लाभ यह है कि इसकी सिंटैक्स bind करीब है:

 $('a.myClass').live('click', function() { ... }); 

delegate , हालांकि, थोड़े अधिक वर्बोज वाक्यविन्यास का उपयोग करता है:

 $('#containerElement').delegate('a.myClass', 'click', function() { ... }); 

हालांकि, मुझे लगता है कि वास्तव में क्या हो रहा है इसके बारे में मुझे और अधिक स्पष्ट होना है। आप live उदाहरण से नहीं जानते हैं कि वास्तव में घटनाओं को document पर कब्जा कर लिया जा रहा है; delegate साथ, यह स्पष्ट है कि ईवेंट कैप्चरिंग #containerElement पर होता है आप live साथ एक ही चीज़ कर सकते हैं, लेकिन वाक्यविन्यास तेजी से भयंकर हो जाता है

कब्जा करने के लिए आपके ईवेंट के संदर्भ निर्दिष्ट करना, प्रदर्शन को बेहतर बनाता है live उदाहरण के साथ, पूरे दस्तावेज़ पर हर एक क्लिक को चयनकर्ता a.myClass साथ तुलना करना है ताकि यह देखने के लिए कि यह मेल खाता है या नहीं। delegate साथ, यह केवल #containerElement के तत्व हैं यह स्पष्ट रूप से प्रदर्शन में सुधार करेगा

अंत में, live आवश्यकता है कि आपका ब्राउज़र a.myClass लिए दिखता है कि यह वर्तमान में मौजूद है या नहींdelegate केवल घटनाओं के लिए दिखता है जब घटनाएं शुरू हो जाती हैं, जिससे एक और प्रदर्शन लाभ आता है।


नायब delegate परिदृश्य के पीछे live का उपयोग करते हैं, ताकि आप live साथ कुछ भी कर सकें जो आप delegate साथ कर सकते हैं। मेरा जवाब उनसे संबंधित होता है क्योंकि वे आमतौर पर उपयोग किए जाते हैं।

यह भी ध्यान रखें कि आधुनिक जीके में इवेंट डेलिगेशन करने का सबसे अच्छा तरीका न तो live और न ही delegate । नया सिंटैक्स (जैसा कि jQuery 1.7) on फ़ंक्शन on है। सिंटैक्स इस प्रकार है:

 $('#containerElement').on('click', 'a.myClass', function() { ... }); 

वे इसके अलावा एक ही हैं:

  • .delegate() आपको पृष्ठ के एक स्थानीय अनुभाग को संक्षिप्त करने देता है, जबकि .live() को पूरे पृष्ठ में ईवेंट को संसाधित करना होगा।
  • .live() एक बर्बाद DOM चयन के साथ शुरू होता है

जब आप कॉल करते हैं .delegate() , यह बस चारों ओर मुड़ता है और कॉल करता है .live() , लेकिन अतिरिक्त संदर्भ पैरामीटर पास करता है

https://github.com/jquery/jquery/blob/master/src/event.js#L948-950

जैसे, मैं हमेशा उपयोग करता .delegate().delegate() यदि आपको वास्तव में पृष्ठ पर सभी घटनाओं को संसाधित करने की आवश्यकता है, तो इसे केवल body को संदर्भ के रूप में दें

 $(document.body).delegate('.someClass', 'click', function() { // run handler }); 

JQuery के पुराने संस्करण वास्तव में delegate कार्यक्षमता हैं आपको कॉल करने पर संदर्भ संपत्ति के रूप में एक चयनकर्ता या तत्व को पास करना होगा .live() बेशक, इसे पृष्ठ पर लोड करने की आवश्यकता है।

 $('.someClass', '#someContainer').live('click',function() { // run handler }); 

और आपके पास एक जैसा व्यवहार है। .delegate()

दो स्थितियों को ध्यान में आया:

  1. आप body तत्व पर delegate का उपयोग करेंगे, इसलिए आप बस इसके बजाय live उपयोग कर सकते हैं क्योंकि यह आसान है।

  2. आपको jQuery लाइब्रेरी के पुराने संस्करण का उपयोग करना होगा, जहां delegate ईवेंट अभी तक कार्यान्वित नहीं हुआ है।

इस उदाहरण पर गौर करें

 <ul id="items"> <li> Click Me </li> </ul> $('#items').delegate('li', 'click', function() { $(this).parent().append('<li>New Element</li>'); }); 

हमारे चयनकर्ता के संदर्भ के रूप में एक DOM तत्व को पारित करके, हम लाइव () लगभग उसी तरह व्यवहार कर सकते हैं जो प्रतिनिधि () करता है यह हेन्डलर को संदर्भ में देता है, न कि दस्तावेज़ – जो कि डिफ़ॉल्ट संदर्भ है नीचे दिए गए कोड को ऊपर दिखाए गए प्रतिनिधि () संस्करण के बराबर है।

 $("li", $("#items")[0]).live("click", function() { $(this).parent().append("<li>New Element</li>"); }); 

संसाधन

लेकिन, बेहतर प्रदर्शन के लिए आप प्रतिनिधि को बेहतर तरीके से देख सकते हैं