Beschleunigen Sie das Abrufen von Posts für meine soziale Netzwerk-App, indem Sie eine Abfrage verwenden, anstatt ein einzelnes Ereignis wiederholt zu beobachten.

Ich habe eine Reihe von Schlüsseln, die zum Posten von Objekten für mein soziales Netzwerk führen, z. B. / posts / id / (post info)

Wenn ich die Posts lade, lade ich / posts / 0 und dann / posts / 1 usw. mit der observSingleEventOfType (.Value) -Methode.

Ich verwende ein LazyTableView, um 30 gleichzeitig zu laden, und es ist ziemlich langsam. Gibt es eine Möglichkeit, wie ich eine der Abfragemethoden oder eine andere Möglichkeit verwenden kann, um sie zu beschleunigen, selbst wenn ich die Daten in meinem JSON-Baum neu strukturieren muss?

Ich komme aus Parse, um meine App erneut zu implementieren, und bisher war die Erfahrung recht gut. Nur das eine, woran ich ein bisschen festhalte. Vielen Dank im Voraus für die Hilfe!

BEARBEITEN

func loadNext(i: Int) { 

    // check if exhists
    let ideaPostsRef = Firebase(url: "https://APPURL")

    ideaPostsRef.childByAppendingPath(i.description).observeSingleEventOfType(.Value, withBlock: {
        (snapshot) in

        if i % 29 == 0 && i != 0 && !self.hitNull { return }
            // false if nil
            // true if not nil
        if !(snapshot.value is NSNull) {
            let postJSON  = snapshot.value as! [String: AnyObject]
            print("GOT VALID \(postJSON)")
            let post = IdeaPost(message: postJSON["message"] as! String, byUser: postJSON["user"] as! String, withId: i.description)
            post.upvotes = postJSON["upvotes"] as! Int
            self.ideaPostDataSource.append(post)
            self.loadNext(i + 1)
        } else {
            // doesn't exhist
            print("GOT NULL RETURNING AT \(i)")
            self.doneLoading = true
            self.hitNull = true
            return
        }
    }
}

Diese rekursive Funktion ruft im Wesentlichen den Wert für die Schlüsselnummer i von der Firebase ab. Wenn es NSNULL ist, weiß es, dass dies der letzte mögliche Beitrag ist, der geladen werden muss, und er wird es nie wieder tun. Wenn NSNULL nicht getroffen wird, aber i% 29 == 0, wird es als Basisfall zurückgegeben, sodass nur 30 Posts gleichzeitig geladen werden (0 indiziert). Wenn ich doneLoading auf true gesetzt habetableView.reloadData() wird mit einem Eigenschaftsbeobachter aufgerufen.

Hier ist ein Beispiel dafür, wie das Array aussieht, das ich abrufe

"ideaPosts" : [ {
    "id" : 0,
    "message" : "Test",
    "upvotes" : 1,
    "user" : "Anonymous"
  }, {
    "id" : 1,
    "message" : "Test2",
    "upvotes" : 1,
    "user" : "Anonymous"
  } ]

Antworten auf die Frage(2)

Ihre Antwort auf die Frage