2013-08-14 5 views
5

मैं वेबपृष्ठ के लिए एक छोटे से व्यवस्थापक पर काम कर रहा हूं।jQuery बाइंड() unbind() और चालू() और ऑफ()

क्या प्रदर्शन (क्लाइंट) बढ़ाने के लिए घटनाओं को अनदेखा करना समझ में आता है? या क्या घटनाओं को अनदेखा करने और इसे बाद में 30 सेकेंड को बाध्य करने के लिए अधिक प्रदर्शन की लागत है?

मेरे प्रश्न: क्या बाइंड() - unbind() या on()। Off() के पीछे विचार क्लाइंटबेस प्रदर्शन को बढ़ा रहा है या क्या मुझे इसे अन्य परिदृश्यों के लिए उपयोग करना चाहिए? यह सवाल आता है क्योंकि अनइंडिंग घटनाओं के कारण मेरा जावास्क्रिप्ट कोड बढ़ रहा है और बढ़ रहा है (लगभग 30%)। और मुझे लगता है कि कुछ चीजें काम नहीं कर सकती हैं, जब उपयोगकर्ता इंटरैक्ट नहीं करता है, जैसा कि मैं चाहता हूं ...

संपादित करें: अधिकांश बार बाध्यकारी/अनइंडिंग कीप्रेस घटनाएं, क्योंकि मुझे diff के लिए तीर कुंजियों की आवश्यकता होती है। परिदृश्यों।

+3

यदि आपने वास्तविक माप नहीं किए हैं, तो प्रदर्शन कारणों के लिए कोड जोड़ना ज्यादा समझ में नहीं आता है। – Pointy

+0

मैं माप कैसे कर सकता हूं? –

+2

फ़ायरफ़ॉक्स के लिए क्रोम डेवलपर टूल और फायरबग दोनों में प्रोफाइलर हैं। यह बहुत संदिग्ध है कि अतिरिक्त ईवेंट हैंडलर किसी भी प्रदर्शन के मुद्दों का कारण बनेंगे, लेकिन प्रोफाइलर का पता लगाने का तरीका होगा। – Pointy

उत्तर

4

यदि आप बांधने और अनबिंड करने का प्रयास करते हैं तो आप कचरा कलेक्टर के लिए वास्तव में आने और अपने कोड को साफ करने के लिए दौड़ की स्थिति बना रहे हैं। एक बार बांधना और फिर से बांधना नहीं है। यदि आपका ग्राहक पक्ष लंबे समय तक (सप्ताह, महीनों) तक चलने की उम्मीद है तो आपको प्रदर्शन के लिए चिंता के रूप में स्मृति प्रबंधन और मेमोरी लीक में देखना चाहिए।

बाइंडिंग-अनबाइंडिंग (यदि सही तरीके से नहीं किया जाता है) मेमोरी लीक उत्पन्न कर सकता है जो खोजने में मुश्किल होती है। यदि आप वेबकिट का उपयोग कर रहे हैं, तो अपने प्रदर्शन के ढेर स्नैपशॉट्स को बाध्यकारी बनाम बिना बाध्यकारी के साथ लें और फिर आप सबसे अच्छा निर्णय ले सकते हैं।

यहाँ एक कड़ी है:

http://addyosmani.com/blog/taming-the-unicorn-easing-javascript-memory-profiling-in-devtools/

5

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

कई विशिष्ट डीओएम तत्वों पर ईवेंट श्रोताओं को बाध्य करने के बजाय, आप अधिक "पक्षियों की आंख" दृष्टिकोण ले सकते हैं और डोम पेड़ के शीर्ष के पास केवल कुछ श्रोताओं को बांध सकते हैं, और फिर जब ईवेंट ट्रिगर किया जाता है तो वास्तव में क्या होता है क्लिक किया।

इस तरह आप घटनाओं के श्रोताओं को बाध्यकारी/अनबाइंडिंग पर सीपीयू खर्च नहीं करेंगे, बल्कि एक घटना संसाधित होने पर एक छोटा सीपीयू हिट लेते हैं (जो आमतौर पर ध्यान देने योग्य नहीं होता है)।

इस विस्तार से यहाँ कवर किया जाता है: इस बारे में चिंता करने से बचने के लिए event delegation vs direct binding when adding complex elements to a page

1

एक समाधान है, खासकर अगर आप लगातार बदलते तत्वों या बड़ी मात्रा के साथ सौदा है, शरीर के साथ अपने घटना रजिस्टर और फिर निर्दिष्ट करने के लिए है एक चयनकर्ता तर्क।

इस तरह

:

$("body").on("click", ".my-actual-element", function(aEvent) { 
    // Event handler code goes here. 
}); 

यहाँ $.on() और अधिक देखें।

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