2017-05-20 33 views
-1

私は応募者のリストを読み込むfirebaseアプリを持っています。問題は、すでに500以上の申請者データを読み込んでいると遅くなるということです。少数のデータ(例:100人の応募者)が読み込まれるため、まだ高速です。私はこのコードを使用します。データの取得にFirebaseが遅い

userRef.on("value", function(snapshot) { 
     snapshot.forEach(function(childSnapshot) { 
      var applicants = []; 
      // other code here 
     }); 
     deferred.resolve(applicants); 
    }, function (error) { 
     deferred.reject(error); 
    }); 

私が取得されるデータの数を制限することを考え、データをページ付けが、それは同じではありませんよ?私はそれをページ付けすることができるためにデータの数を知る必要があるので、検索は同じであろうから。

+0

は一度だけのキーを取得し、ローカルストレージに格納するかもしれませんそしてちょうど応答にアプリを維持するための鍵がロードされていないキー(インデックス付け) – Zik

+0

で値を取得ユーザーが見ることができるより多くのデータ。 500人の応募者のリストを携帯電話の画面に表示することはほとんどないと思われますので、合理的に見なければならない実際の数に減らすことをお勧めします。それとは別に、実際に問題が発生していなくても、パフォーマンスを向上させることは常に困難です。だからもっとフィードバックが必要な場合は、表示される低速ロードを再現するjsbinを設定できますか? –

答えて

0

私は間違っているかもしれませんが、完了するまで.on("value")からすべてのデータを要求することから始まります。だからあなたは多くのデータを持っている場合、それは多くの時間がかかります。代わりに、.on("child_added")関数を使用して、各子がデータベースに追加されたときにそれを返すようにすることもできます。しかし、それはあなたが最初にそれを呼び出すときに各要素のために呼び出されます。したがって、非ブロッキング/高速起動のために「完璧」です。ドキュメントで

ルック: https://firebase.google.com/docs/database/admin/retrieve-data#child-added

// Retrieve new posts as they are added to our database 
ref.on("child_added", function(snapshot, prevChildKey) { 
    var newPost = snapshot.val(); 
    console.log("Author: " + newPost.author); 
    console.log("Title: " + newPost.title); 
    console.log("Previous Post ID: " + prevChildKey); 
}); 
+0

これは私がFirebaseを使い始めた当初考えていたものでした。しかし、ネットワークレベルでは、 'value'イベントと' child_added'イベントがどのようにデータを取り出すのかに違いはありません。両方とも、イベントの発生を開始する前に、リスナーのすべての初期データを取得します。 –

+0

ありがとうございました。私はあなたを助けることができないと思います。ごめんなさい –

関連する問題