ध्यान दें:

  1. फायरबेस की अतुल्यकालिक प्रकृति पर यहां हजारों बार चर्चा की गई है, लेकिन मेरी कम प्रतिष्ठा संख्या मौजूदा प्रश्न पर टिप्पणी की अनुमति नहीं देती है। इसलिए मैंने यह सवाल पूछा है।
  2. मैं एक नोब हूं, इसलिए कृपया कार्यान्वयन को समझने में आसान तरीके से समझने में मेरी सहायता करें।

Metode rails rspec update_all berfungsi di pengontrol tetapi tidak di rspec

  1. उपयोगकर्ता HTML इनपुट बॉक्स में एक मान दर्ज करता है
  2. फायरबेस डीबी में इनपुट मान खोजें (शोमैसेज () को कॉल किया जाता है)
  3. चरण 2 में खोज परिणाम के आधार पर उपयुक्त परिणाम प्रदर्शित करें

समस्या का सामना करना पड़ा: चरण 3 में प्रदर्शित संदेश को प्रदर्शित होने में औसतन 1.75 सेकंड का समय लगता है। यह अनुभव उपयोगकर्ता के अनुकूल नहीं है। मैं जितनी जल्दी हो सके संदेश प्रदर्शित करना चाहता हूं यानी लाने के समय को कम करना चाहता हूं।

संभावित मूल कारण:

  1. या तो फायरबेस डीबी से डेटा लाने का मेरा तरीका गलत है (मुझे अभी भी समझ में नहीं आता कि वादा कैसे रखा जाए :()
  2. या खोज और प्रदर्शन का तंत्र सही नहीं है
var full_name; 

function showMessage(){
      extractData();
    }

function extractData(){	
	test(function(returnValue) {
  		custom_message = searchMessage(returnValue);
		var container = document.querySelector('#placeholder');
		var para = document.createElement('p');
		var custom_message = "Happy happy, buds!";
		para.innerHTML = custom_message;
		para.className = "message";
		container.appendChild(para);
	});
}

function test(callback) { 
	var ref = firebase.database().ref();
    ref.on('value', function(snapshot) {
    var data = snapshot.val();
    callback(data); 
  }, function (error) {
	   console.log("Error: " + error.code);
	});
}

function searchMessage(data){
    for(var i = 0; i < data.length; i++)
    {
    	name_f_data = data[i].firstName.concat(" ", data[i].lastName);

		if(full_name.toLowerCase() == name_f_data.toLowerCase())
		{
			console.log(name_f_data.toLowerCase());
    		console.log(full_name.toLowerCase());
			return data[i].message;
		}
    }
}
0
Classic Agent 22 नवम्बर 2019, 06:45

1 उत्तर

सबसे बढ़िया उत्तर

रीड ऑपरेशन में लगने वाला समय इस पर निर्भर करता है:

  1. Firebase के सर्वर से आपके कनेक्शन की प्रतीक्षा अवधि
  2. आप जितना डेटा पढ़ रहे हैं
  3. आपके कनेक्शन की बैंडविड्थ
  4. अनुरोध को संसाधित करने में Firebase को लगने वाला समय

ज्यादातर मामलों में, फायरबेस में लगने वाला समय कुल समय का केवल एक बहुत छोटा हिस्सा होता है, और आपका अधिकांश समय वास्तव में डेटा ट्रांसफर में जाता है, जो पूरी तरह से बैंडविड्थ और डेटा की मात्रा पर निर्भर करता है। अगर आप पहली बार पेज में फायरबेस से डेटा पढ़ रहे हैं, तो विलंबता भी अधिक मायने रखती है, क्योंकि फायरबेस को एक कनेक्शन स्थापित करना होता है, जिसमें कुछ राउंडट्रिप लगते हैं।

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

आप इसके साथ काफी करीब आ सकते हैं:

var ref = firebase.database().ref();
var query = ref.orderByChild().startAt(firstName).endAt(firstName+"~");
query.once('value', function(snapshot) {
  var data = snapshot.val();
  callback(data);

इससे ट्रांसफर किए गए डेटा की मात्रा में काफी कमी आएगी। हालांकि कुछ नोट्स:

  1. क्वेरी केवल उन्हीं लोगों को लौटाती है जिनके पास पहला नाम है जिसे आप ढूंढ रहे हैं। यह अभी तक उपनाम पर फ़िल्टर नहीं करता है, इसलिए आपको अभी भी क्लाइंट-साइड कोड में इसे फ़िल्टर करना होगा।
  2. इसे और अधिक अनुकूलित करने के लिए, डेटाबेस में पूरा नाम (जिसे अब आप क्लाइंट-साइड कोड में लिखते हैं) स्टोर करें ताकि आप उस पर क्वेरी कर सकें और डेटा ट्रांसफर को और भी कम कर सकें।
  3. फायरबेस क्वेरी केस संवेदी होती हैं, इसलिए क्वेरी केवल वही डेटा लौटाती है जहां मामला सटीक रूप से मेल खाता है। यदि आप मामले के प्रति उदासीन रहना चाहते हैं, तो डेटाबेस में एक toLowerCase() मान संग्रहीत करने पर विचार करें।
  4. firstName पर एक इंडेक्स को परिभाषित करना सुनिश्चित करें, अन्यथा फायरबेस डेटाबेस अभी भी क्लाइंट को सभी डेटा भेज देगा, और एसडीके फ़िल्टरिंग क्लाइंट-साइड करेगा।
1
Frank van Puffelen 22 नवम्बर 2019, 08:04