2016-09-30 4 views
0

Ich benutze Firebase 3.4.1 und reagiere nativ 0.34.1.Firebase mit Reaktion nativ, zu langsam

Ich war erstaunt, dass empfangene Daten vom Firebase sehr langsam ist.

Dies ist mein reaktionseigener Testcode.

class test1 extends Component { 
    constructor(){ 
     super(); 

     let config = { 
      apiKey: "xxxxxxxxxxxxxx", 
      authDomain: "yyyyyyyy.firebaseapp.com", 
      databaseURL: "https://zzzzzz.firebaseio.com", 
     }; 

     Firebase.initializeApp(config); 

     this.rootRef = Firebase.database().ref(); 
     this.postRef = this.rootRef.child('posts'); 

     this.state = { 
      like : 'like : ', 
      comment : 'comment : ', 
     }; 

    componentWillMount(){ 
     console.debug('componentWillMount'); 
     let num = 0; 
     let time = new Date().getTime(); 
     this.postRef.orderByKey().limitToLast(10).once('value') 
     .then((postsnap) => { 
      console.debug(new Date().getTime() - time); 
      postsnap.forEach((postItem) => { 
       console.debug(num++); 
       console.debug(new Date().getTime() - time); 
       this.setState({ 
        like : this.state.like + postItem.child('like').numChildren() + ', ', 
        comment : this.state.comment + postItem.child('comment').numChildren() + ', ', 
       }); 
      }); 
     }); 
    } 

    render() { 
     return (
      <View style={styles.container}> 
       <Text> 
       {this.state.like} 
       </Text> 
       <Text> 
       {this.state.comment} 
       </Text> 
      </View> 
     ); 
    } 
} 

Meine Struktur Feuerbasis-Datenbank ist sehr einfach, 'rootref' hat nur 6 'Beiträge'.

componentWillMount 
8760 
0 
8761 
1 
8766 
2 
8767 
3 
8768 
4 
8769 
5 
8772 

Haben Sie Jungs für eine schnellere Abrufen von Daten aus Feuerbasis eine Idee?

+0

Die Datenwiederherstellungsleistung ist normalerweise eine Kombination aus der angeforderten Datenmenge und der Aufteilung nach der verfügbaren Bandbreite. Es könnte sein, dass Ihr React Native-Setup Probleme hat, aber dafür können wir nichts tun. Kannst du eine reguläre React jsbin/jsfiddle einrichten, die das Problem reproduziert? –

+0

scheint es Verbindungsproblem zu sein, .. ich denke .. gibt es keine Kosten nach der Verbindung. –

Antwort

0

Es ist viel besser, ein Singleton-Muster zu verwenden, um die Reference zu erhalten. Anstatt jedes Mal Firebase.initializeApp aufzurufen, machen Sie es global, indem Sie es in ein separates Modul einfügen. Und dann exportieren Sie den instanziierten Verweis auf Firebase.database().ref(). Und benutze es während der gesamten Lebensdauer der App.

Wie auch immer, ich habe festgestellt, dass, selbst wenn ich diesen Ansatz verwende, die minimale Ladezeit für 1 Knoten Abfrage (node/key) ~ 200 Millisekunden ist, was sehr langsam ist.

Verwandte Themen