2010-12-08 9 views
6

क्या कोई मुझे बता सकता है कि jquery data() डेटा स्टोर करता है और जब इसे मिटा दिया जाता है और कैसे?Jquery डेटा() भंडारण

यदि मैं AJAX कॉल परिणाम संग्रहीत करने के लिए इसका उपयोग करता हूं तो क्या कोई प्रदर्शन समस्या है?

उदाहरण के लिए:

$("body").data("test", { myData: 'abcd'}); 
+0

यह ग्राहक के पक्ष में संग्रहीत किया जाता है इसके बाद के संस्करण बकवास का एक illustrated example केवल, मैं डेटा पुनर्प्राप्त करने के लिए jQuery डेटा और jQuery मेटा डेटा प्लग इन का उपयोग किया गया है और किसी भी समस्या – kobe

उत्तर

3

jQuery से सामग्री

jQuery.data() विधि हमें एक तरीका है कि वृत्तीय संदर्भ से सुरक्षित है में डोम तत्वों को किसी भी प्रकार की डेटा संलग्न करने के लिए अनुमति देता है देखने के और इसलिए स्मृति रिसाव से मुक्त। jQuery सुनिश्चित करता है कि जब jQuery विधियों के माध्यम से DOM तत्व हटा दिए जाते हैं, और जब उपयोगकर्ता पृष्ठ छोड़ देता है तो डेटा हटा दिया जाता है। हम एक तत्व के लिए कई अलग-अलग मान सेट कर सकते हैं और उन्हें बाद में पुनर्प्राप्त कर सकते हैं:

+0

धन्यवाद @gov में कभी नहीं भाग गया। लेकिन अगले लेख में http://apheliondynamics.com/blog/2010/01/19/the-power-of-jquery-data-and-a-practical-example/article का उल्लेख है कि डेटा() सामग्री संग्रहीत करता है कैश में तो जब मैं वास्तव में कैश साफ़ कर दिया गया तो मैं उलझन में था! – ANP

+0

@ANP इस पृष्ठ पर जाएं, http://www.art.com/gallery/id--c23944/fine-art-prints.htm?ui=351BF178E486494982CDA4842EB6BD55 और दृश्य स्रोत करें और छुपाएं की जांच करें, फिर से कैश साफ़ करें आपका ब्राउज़र, फिर भी आप उन वैल्यू /// को देख सकते हैं जिन्हें वे डोम स्ट्रक्चर के हिस्से के रूप में संग्रहीत करते हैं, मुझे लगता है कि वे कैश में संग्रहीत हैं ... – kobe

26

सभी डेटा ऑब्जेक्ट cache नाम की ऑब्जेक्ट के अंदर संग्रहीत किया जाता है। किसी भी DOM तत्व से जुड़े सभी डेटा और ईवेंट देखने के लिए अपने कंसोल में $.cache की सामग्री लॉग करें।

जिस तरह से jQuery ने इस कैश में किसी ऑब्जेक्ट के साथ एक DOM ऑब्जेक्ट को लिंक किया है, वह DOM ऑब्जेक्ट में हेरफेर कर रहा है। हम एक इनपुट तत्व

<input type="text" value="hello" /> 

जो "foo"

$(e).data("foo", "bar"); 

अब jQuery रूप jQuery<current time in ms> के एक यादृच्छिक स्ट्रिंग, उदाहरण के लिए, का कहना है jQuery1291790929680, नाम के एक डेटा कुंजी है जिसके द्वारा भी पहुंचा जा सकता है है कहो $.expando। jQuery इस विस्तार स्ट्रिंग को प्रत्येक DOM ऑब्जेक्ट की कुंजी के रूप में जोड़ता है जिसमें संबंधित डेटा आइटम या ईवेंट होता है। तो ऊपर इनपुट तत्व इस में शामिल होंगे के लिए डोम वस्तु जैसे कुछ पूर्णांक मान के साथ कुंजी expando:

jQuery1291790929680: 4 

4 सिर्फ एक यादृच्छिक उदाहरण है, लेकिन यह संख्या $.cache वस्तु है, जहां संबद्ध डेटा में एक सूचकांक दर्शाता है और इस डीओएम ऑब्जेक्ट के लिए ईवेंट संग्रहीत हैं। तो ऊपर इनपुट तत्व का डेटा पुनः प्राप्त करने के लिए इस जानकारी को देखते हुए, हम परोक्ष रूप से लिख सकते हैं:

$.cache[4]["foo"] 

जो "बार", जो $(e).data("foo") लेखन का एक अप्रत्यक्ष तरीका है लौटना चाहिए।

:)

+0

मैं आपकी व्याख्या के लिए वास्तव में आभारी हूं। – ANP

+0

@ एएनपी - धन्यवाद, मुझे खुशी है कि यह सहायक था :) – Anurag

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