2012-08-16 22 views
14

मैं फ़ायरबेस का उपयोग कर एक वेब एप्लिकेशन बना रहा हूं जो एक ही डेटा लेता है और इसे दो अलग-अलग तरीकों से प्रस्तुत करता है - एक सूची में और Google मानचित्र पर मार्कर के रूप में।फायरबेस - कैशिंग प्रदर्शन में सुधार करता है?

अभी, प्रत्येक दृश्य में - मानचित्र या सूची - मेरे पास फ़ायरबेस से डेटा पूछने के लिए कोड है, इसे एक साथ मिलाएं, और इसे प्रदर्शित करें। इसके बजाय, मैं इस योजना पर विचार कर रहा हूं: स्टार्टअप पर, डेटा से पूछताछ करें, इसे मर्ज करें, और इसे सभी को उस सरणी में सहेजें जिसे मैं देखने के लिए पास करता हूं।

एक अर्थ में, मैं एक सरणी में फायरबेस डेटा "कैशिंग" कर रहा हूं। यह एक अर्थ में आदर्श नहीं है - कैश किए गए डेटा फायरबेस को सीधे पूछताछ के रूप में अद्यतित नहीं है। दूसरी ओर, मैं केवल एक बार फायरबेस को बुलाता हूं।

क्या यह प्रदर्शन की समझ में आता है? क्या फ़ायरबेस से डेटा पढ़ने से आयाम के उसी क्रम में एक सरणी से डेटा पढ़ने के रूप में लिया जाता है?

उत्तर

21

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

मुझे पूरी तरह से यकीन नहीं है कि "फायरबेस पूछताछ" से आपका क्या मतलब है। फायरबेस के पारंपरिक अर्थ में प्रश्न नहीं हैं। इसमें कॉलबैक को जोड़ने के लिए बस विधियां हैं। क्या आप फायरबेस से समय-समय पर डेटा प्राप्त करने के लिए "एक बार()" फ़ंक्शन का उपयोग कर रहे हैं? यदि ऐसा है तो यह संभावित रूप से बहुत अक्षम हो सकता है। एक बार एक सुविधा विधि है और आमतौर पर केवल उस डेटा के लिए उपयोग किया जाना चाहिए जिसे अत्यधिक बार-बार एक्सेस किया जाता है या किसी कारण से डेवलपर रीयल-टाइम में अपडेट नहीं करना चाहता है। यदि कोई सक्रिय "ऑन" कॉल बकाया होते हैं जब एक बार() पूर्ण हो जाता है, तो फ़ायरबेस उस डेटा के कैश को फ्लश करेगा, और बाद में किसी भी कॉल को सर्वर पर एक राउंडट्रिप की आवश्यकता होगी।

क्या आप चाहते हैं तुल्यकालिक एक कुशल तरीके से डेटा के नवीनतम संस्करण की एक स्थानीय प्रति पहुंचने का एक तरीका है, तो मैं इस विधि की सिफारिश:

var savedSnapshot = null; 
dataRef.on("value", function(snapshot) { 
    savedSnapshot = snapshot; 
}); 

//and then when you need to read the data 
var theData = savedSnapshot.val() 

पर() कॉल एक ही बनाए रखने से, फायरबेस आपके डेटा को तब तक अद्यतित रखने में सक्षम होता है जब चीजें बदलती हैं, जब चीजें बदलती हैं, हर बार जब भी आपको इसकी आवश्यकता होती है तो डेटा को फिर से लोड करने के बजाय।

+1

ग्रेट स्पष्टीकरण। दस्तावेज़, बीटीडब्ल्यू, इस इंप्रेशन को देते हैं लेकिन इस तरह के महान विवरण में नहीं जाते हैं (यह दस्तावेज़ों के लिए एक महान परिशिष्ट हो सकता है) – Kato

+1

हम निकट भविष्य में दस्तावेज़ों पर प्रदर्शन पर कुछ अनुभाग जोड़ने की योजना बना रहे हैं। –

+0

@AndrewLee क्या यह प्रदर्शन अनुभाग कभी भी लिखा जाएगा? मैं अब 2 साल के लिए फायरबेस का उपयोग कर रहा हूं और मैंने ठीक से "क्लिक" नहीं किया था और साथ ही जब यह (5 वर्षीय) उत्तर ने समझाया कि आप बाद में उपयोग के लिए डेटासेट स्नैप कैसे स्टोर कर सकते हैं। मुझे अब एहसास है कि मैं जानबूझकर कोडिंग कर रहा हूं, यह जानने के डर के लिए कि फायरबेस क्या करता है और आंतरिक रूप से "कैश" नहीं करता है। अब मैं देखता हूं कि डेटा स्नैपशॉट केवल एक अपरिवर्तनीय कर्सर है जो एक आंतरिक अपरिवर्तनीय डेटास्ट्रक्चर के लिए है, और 'वैल()' अपने डेटा को पीओजेओ में क्लोन करता है। यह बहुत सुंदर ढंग से डिजाइन किया गया है! सलाम :-) – skrebbel

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