我使用firebase 3.4.1和react-native 0.34.1。
我惊讶地发现从firebase接收检索到的数据非常慢。
这是我的反应原生测试代码。
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>
);
}
}
我的firebase数据库结构非常简单, &#39; rootref&#39;只有6个帖子&#39;。
componentWillMount
8760
0
8761
1
8766
2
8767
3
8768
4
8769
5
8772
你们有没有想过更快地从firebase检索数据?
答案 0 :(得分:0)
使用单例模式获取Reference
要好得多。不是每次都调用Firebase.initializeApp
,而是通过将其放在一个单独的模块中使其成为全局的。然后,将实例化的引用导出到Firebase.database().ref()
。并在整个应用程序生命周期中使用它。
无论如何,我发现,即使我使用这种方法,我获得的1节点查询(node/key
)的最小加载时间约为200毫秒,这实在很慢。