Swift-Firebase Looping Costs - PullRequest
       4

Swift-Firebase Looping Costs

0 голосов
/ 14 марта 2020

Этот вопрос не о том, как l oop над детьми, а о зацикливании детей по-разному, чтобы сэкономить расходы

Моя база данных:

-someRef
   -someUserId // say this ref has 10000 children
        -uid1: someVal
        -uid2: someVal
        -uid3: someVal
        ...
        -uid7989: someVal
        ...
        -uid10000: someVal

После этого ответ Я могу l oop над детьми вот так:

var lookForThisUserId = "uid7989"

someRef?.observeSingleEvent(of: .value, with: { (snapshot) in
  for child in snapshot.children {
    let snap = child as! DataSnapshot

    if snap.key == self.lookForThisUserId {
       // user found
       break
    }
  }
})

Но я задал этот вопрос на днях и изначально выбрал этот ответ , который оказался неэффективным способом сделать то, что я хотел сделать. В комментариях @Jay сказал:

«Есть принятый ответ, но вот в чем проблема. По сути, вы пытаетесь отслеживать количество дочерних элементов в узле. во всем узле (который может быть тысячами голосов) и с использованием .childrenCount. Это приведет к чтению большого количества ненужных данных и увеличению затрат "

Так что это заставило меня задуматься, есть разница в стоимости между кодом l oop, который я добавил выше, и кодом ниже:

var lookForThisUserId = "uid7989"

someRef?.child(lookForThisUserId).observeSingleEvent(of: .value, with: { (snapshot) in

    if !snapshot.exists() {
        // this user isn't in here
    }

    // user found
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...