2015-01-28 9 views
5

के शरीर या अलग-अलग समूहों पर घटनाओं क्लिक स्टोर करने के लिए कुशल मैं निम्नलिखित पढ़ा है बहुत सारी मेमोरी और धीमी गति से प्रदर्शन ...यह अधिक तत्वों

... क्योंकि तत्वों को प्रभावित करने वाली घटनाएं आप ईवेंट वाले हैंडलर को एक तत्व पर रख सकते हैं और ईवेंट लक्ष्य संपत्ति का उपयोग करके पता लगा सकते हैं कि इसके किस बच्चे ने "

तो, क्या सिर्फ शरीर पर एक क्लिक घटना कर रहे हैं और उसके बाद सही समारोह सौंपने के लिए कमियां हैं tion?

मैं यहाँ एक उदाहरण है:

एचटीएमएल:

<div id="test" class="box">gfdgsfdg </div> 
<div id="test2" class="box">gfdsgfdsg</div> 
<div id="test3" class="box">fdsgfdsgg</div> 
<ul id="test4" class="box"> 
    <li id="test5" class="box">fsgfdsg</li> 
    <li id="test6" class="box">gfdsgfds</li> 
    <li id="test7" class="box">gfdsgfds</li> 
    <li id="test8" class="box">gfdsgfds</li> 
</ul> 

जे एस:

var body = document.body; 

if (body.addEventListener) { 
    body.addEventListener('click', function (e) { 
     delegate(e, "click"); 
    }, false); 
} else { 
    body.attachEvent('onclick', function (e) { 
     delegate(e, "click"); 
    }, false); 
} 


function delegate(e) { 
    var sourceNode = e.target || e.srcElement; 
    var id = sourceNode.id; 
    switch (id) { 
     case ("test"): 
      // do some func 
      break; 
     case ("test2"): 
      // do some func 
      break; 
     case ("test3"): 
      // do some func 
      break; 
     case ("test4"): 
      // do some func 
      break; 
     default: 
      // do nothing 
      break; 

    } 
} 

दिलचस्प बिंदु: यह एक घटना को बढ़ा देंगे Deadlink के लिए http://jsfiddle.net/jkg0h99d/3/

कोड बैकअप जब भी उपयोगकर्ता क्लिक करता है। लेकिन, क्या यह वास्तव में एक समस्या होने जा रहा है? सभी यह है एक स्विच के माध्यम जाँच (या जांच करता है कि हो सकता है)

इस की बात, मात्र ब्याज है, लेकिन यदि कोई उपयोगकर्ता बिंदु अनुकूलन के बारे में पूछा गया है। मैं सोच रहा हूं कि इसे बहुत जल्दी अनुकूलित किया जा सकता है लेकिन मैं विषय पर चर्चा जारी रखूंगा।

+3

आप शरीर पर इसके बारे में सब डाल तो किसी भी क्लिक आप पृष्ठ पर इसे माध्यम से जाने की जरूरत होगी। प्रदर्शन हिट मोबाइल उपकरणों पर अधिक ध्यान देने योग्य है – Huangism

+2

तत्वों की संख्या के साथ, मैं इसके बारे में भी चिंता नहीं करता। जब तक आप अपना कोड प्रोफाइल नहीं करते हैं और यह एक बाधा बनने के लिए पाया जाता है, यह समयपूर्व अनुकूलन है। यदि आपके पास कई तत्व हैं जिन्हें क्लिक करने पर सभी को * वही * (या लगभग एक ही चीज़) करने की आवश्यकता है, तो यह एक उच्च स्तर पर एक हैंडलर संलग्न करने के लिए समझ में आता है।अन्यथा, मुझे लगता है कि 'स्विच' कथन एक दुःस्वप्न का थोड़ा सा होने जा रहा है। –

+0

हां, यह एक प्रदर्शन था। और मुझे लगता है कि हुआंगवाद एक बहुत अच्छा मुद्दा उठाता है, धन्यवाद – user2330270

उत्तर

0

इस प्रकार की सबसे चीजों के साथ के रूप में, जवाब है, "यह निर्भर करता है" और आप एक मध्यम जमीन लेने की जरूरत है कि। आम तौर पर, सलाह है कि अत्यधिक बुलबुले से बचने के लिए डीओएम पेड़ में कम से कम अपेक्षाकृत उनके स्रोत के करीब घटनाएं रखें और body पर घटनाओं को तब तक रखने से बचें जब तक यह आवश्यक न हो।

एक उदाहरण के रूप में, आप अपने li रों के लिए घटना के प्रतिनिधिमंडल को संभालने के लिए अपने ul पर कोई हैंडलर बन सकता था:

document.getElementById('test4').addEventListener('click', function (e) { 
    // handle event for li 
}); 

यह आपको दोनों दुनिया के सर्वश्रेष्ठ देता है आप क्योंकि:

  • Have एक घटना अपने डोम के लिए बाध्य हर li
  • के लिए एक अलग प्रति के बजाय li क्लिक्स को संभालने के लिए अगर सेट घटनाओं पुनः अनुलग्न नहीं है li के गतिशील संशोधित किया गया है
  • न्यूनतम उत्साह से भरा हुआ (सिर्फ एक स्तर) है
  • एक बड़ा बदसूरत स्विच बयान

में तर्क मल्टीप्लेक्स नहीं है तो मुझे लगता है कि में रखने के लिए एक सार्थक सिद्धांत है मन।

+0

1. घटना शरीर से बंधी थी, इसलिए यह केवल HTML स्तर पर बबल होगा। यदि आपने इसे प्रत्येक तत्व पर किया है, तो यह अभी भी ऊपर बुलबुला होगा ताकि शुरुआती के लिए अधिक देखभाल की आवश्यकता हो। 2. आप उल के लिए केवल खाते में स्विच अनुकूलित कर सकते हैं, यह एक त्वरित प्रदर्शन था 3. देखें #4. ठीक है , मायाबे, तुमने मुझे मिल गया;) लेकिन मैं अपने बिंदु पर बहस करूंगा, एक घटना कोड लोड के मुकाबले एक स्विच कम या ज्यादा स्पष्ट है? 5. कृपया कक्षा चयन के माध्यम से ईवेंट संलग्न करने के लिए नोड्स निर्दिष्ट करने के लिए http://jsfiddle.net/z1hx8yn1/ देखें 6. आपके उत्तर के लिए धन्यवाद, यह – user2330270

+0

@ user2330270 की सराहना की गई है मेरे पहले बिंदु पर बुलबुले से कुछ लेना देना नहीं था। बुलबुले के संबंध में, आपकी समझ बुलबुला पीछे की तरफ है। यदि कोई व्यक्ति डोम के भीतर गहरे तत्व पर क्लिक करता है, तो उस घटना को माता-पिता से माता-पिता तक यात्रा करना पड़ता है जब तक कि इसे संभाला न जाए। _That_ वह जगह है जहां प्रदर्शन चिंता बुलबुले के साथ है। – JLRishe

+0

@ user2330270 आपको बुलबुले चिंताओं के बारे में मेरा विश्वास नहीं करना है। देखें कि [jQuery दस्तावेज़ीकरण] (http://api.jquery.com/on/) घटना बबलिंग प्रदर्शन के बारे में क्या कहता है: _ "सर्वोत्तम प्रदर्शन के लिए, लक्षित तत्वों के लिए जितना संभव हो सके दस्तावेज़ स्थान पर प्रतिनिधि ईवेंट संलग्न करें। बड़े दस्तावेज़ों पर प्रतिनिधि कार्यक्रमों के लिए दस्तावेज़ या दस्तावेज का अत्यधिक उपयोग। "_ इस तथ्य का तथ्य यह है कि लगभग किसी भी पृष्ठ पर सभी घटनाओं को संभालने के लिए कोई भी ईवेंट हैंडलर का उपयोग नहीं करता है, इसलिए यह एक बहुत अच्छा संकेत होना चाहिए जाने का सबसे अच्छा तरीका नहीं हो सकता है। – JLRishe

संबंधित मुद्दे