Mar*_*ark 5 javascript firebase firebase-realtime-database
我有一个具有2k用户的React Native应用程序。所有用户数据均以以下格式存储在Firebase中:

因此,每个用户都有一个禁食列表,他们通常每天在其中创建一个禁食。很少的数据。这是我的数据库使用情况图:
一些观察:
因此,用户不可能下载其他用户的数据。我运行了Firebase Profiler约11分钟:

我很沮丧 最后,这是我的一个文件,除了登录/注销外,它几乎执行所有Firebase操作:
import * as firebase from 'firebase';
import moment from 'moment'
import {
currentFastChanged,
setGraphData,
setAllData,
targetFastChanged,
setLastFastEnd,
usernameChanged,} from '../actions/actions'
// Initialize Firebase
var firebaseConfig = {
};
export const firebaseApp = firebase.initializeApp(firebaseConfig);
function syncFirebase(store) {
firebaseApp.auth().onAuthStateChanged(function(user) {
if (user)
{
getUserRef().child('TargetFast').on('value', (snap) => {
store.dispatch(targetFastChanged(snap.val() ? snap.val() : 15));
});
getUserRef().child('Fasts').on('value', (snap) => {
var items = [];
snap.forEach((child) => {
items.push({
start: child.val().Start,
end: child.val().End,
_key: child.key
});
});
items.sort(function(a, b) {
return parseInt(b.start) - parseInt(a.start);
});
store.dispatch(setGraphData(createGraphData(items, store.getState().myReducer.targetFast)));
store.dispatch(setLastFastEnd(getLastFastEnd(items)));
store.dispatch(setAllData(items));
});
getUserRef().child('CurrentFast').on('value', (snapshot) => {
store.dispatch(currentFastChanged(snapshot.val()));
});
});
}
})
}
function getUserRef()
{
return firebaseApp.database().ref('Users/' + firebaseApp.auth().currentUser.uid);
}
function createGraphData(items, targetFast) {
var graphItems = [];
var idx = 0;
for(idx = 0; idx < 7 && idx < items.length; idx++)
{
var item = items[idx];
graphItems.push({
duration : moment.duration(item.end - item.start).asHours(),
label : moment(item.start).format('ddd'),
item : item
});
}
while(graphItems.length < 7)
{
var add = targetFast * .2 * (Math.random() - .5);
var randomVal = targetFast + add
graphItems.push({duration : randomVal, label : "na", color : 'lightgrey', });
}
return graphItems.reverse();
}
function getLastFastEnd(items) {
return items.length && items[0].end;
}
export function setCurrentFastRef(val)
{
getUserRef().child('CurrentFast').set(val);
//firebaseApp.database().ref('Users/' + firebaseApp.auth().currentUser.uid + '/CurrentFast').set(val);
}
export function pushNewFast(start, end)
{
getUserRef().child('Fasts').push({'Start': start, 'End': end, 'Publish' : true})
}
export function editFastRef(key, start, end)
{
getUserRef().child('Fasts').child(key).set({'Start' : start, 'End' : end});
}
export function deleteFastRef(key)
{
getUserRef().child('Fasts').child(key).remove();
}
export function setTargetFastRef(val)
{
getUserRef().child('TargetFast').set(val);
}
module.exports = firebaseApp;
module.exports.sync = syncFirebase;
module.exports.serverTimestamp = firebase.database.ServerValue.TIMESTAMP
Run Code Online (Sandbox Code Playgroud)
我的账单在15天左右的时间里一直是$ 1,看起来好像是微不足道的数据量。我目前的怀疑是:
侦听器只是多次堆积和下载数据。监听器不会被删除
开销不是我的错(SSL?)
??? 有任何想法吗?