1 回答

TA貢獻(xiàn)1780條經(jīng)驗 獲得超5個贊
讀取操作所需的時間取決于:
您連接到 Firebase 服務(wù)器的延遲
您正在讀取的數(shù)據(jù)量
您的連接帶寬
Firebase 處理請求所需的時間
在大多數(shù)情況下,F(xiàn)irebase 所花費的時間只是總時間的很小一部分,而您的大部分時間實際上都花在了數(shù)據(jù)傳輸上,這完全取決于帶寬和數(shù)據(jù)量。如果這是您第一次在頁面中從 Firebase 讀取數(shù)據(jù),則延遲也更重要,因為 Firebase 必須建立連接,這需要幾次往返。
您當(dāng)前的代碼正在從數(shù)據(jù)庫中下載所有數(shù)據(jù),然后在 JavaScript 代碼中搜索與某個值匹配的子節(jié)點。減少所需時間的最佳方法(除了升級到快速連接)是傳輸更少的數(shù)據(jù),您可以使用 Firebase 的查詢機(jī)制在服務(wù)器上進(jìn)行過濾。
你可以非常接近:
var ref = firebase.database().ref();
var query = ref.orderByChild().startAt(firstName).endAt(firstName+"~");
query.once('value', function(snapshot) {
var data = snapshot.val();
callback(data);
這將顯著減少傳輸?shù)臄?shù)據(jù)量。不過有幾點注意事項:
該查詢僅返回具有您要查找的名字的人。它還沒有過濾姓氏,所以你仍然需要在客戶端代碼中過濾它。
為了進(jìn)一步優(yōu)化這一點,請將全名(您現(xiàn)在在客戶端代碼中編寫)存儲在數(shù)據(jù)庫中,以便您可以對其進(jìn)行查詢并進(jìn)一步減少數(shù)據(jù)傳輸。
Firebase 查詢區(qū)分大小寫,因此查詢僅返回大小寫完全匹配的數(shù)據(jù)。如果要查詢不區(qū)分大小寫,請考慮
toLowerCase()
在數(shù)據(jù)庫中存儲一個值。請務(wù)必在 上定義索引
firstName
,否則 Firebase 數(shù)據(jù)庫仍會將所有數(shù)據(jù)發(fā)送到客戶端,SDK 將在客戶端執(zhí)行過濾。
添加回答
舉報