[英]Firebase - Check efficiently username taken
我開發了一個小功能,用於檢查通過注冊來賓輸入的用戶名是否可用。 盡管如此,該函數還是使用迭代和條件檢查在設備上進行本地檢查。 我認為,當該列表中有成千上萬的用戶時,這可能會成為將來的性能瓶頸(每次成功創建新用戶時,列表都會更新)。 有沒有辦法可以在后端方面更有效地執行此操作?
這是現在可以使用的功能:
func checkUsernameTaken(completion: (result: NSError) -> Void)
{
let errorFound:NSError = NSError(domain: "", code: 0, userInfo: nil)
dbReference.child("usernamesTaken").observeEventType(.Value, withBlock: { (snapshot: FIRDataSnapshot!) -> Void in
if(snapshot != nil )
{
for rest in snapshot.children.allObjects as! [FIRDataSnapshot] {
if(rest.value as? String == self.usernameTxtField.text!){
self.isUsernameTaken = true
}else{
self.isUsernameTaken = false
}
}
completion(result:errorFound)
}else{
self.isUsernameTaken = false
completion(result:errorFound)
}
})
}
Firebase中的數據結構是這樣的:
該列表將如前所述增長,但現在僅用於測試目的。
提前致謝
更新:
func usernameValidation(completion: (result: NSError) -> Void)
{
let errorFound:NSError = NSError(domain: "", code: 0, userInfo: nil)
dbReference.child("usernamesTaken").queryEqualToValue(self.usernameTxtField.text!).observeEventType(.Value, withBlock: { (snapshot: FIRDataSnapshot!) -> Void in
print(snapshot.childrenCount)
})
}
讓Firebase執行查詢,而不是自己進行搜索。 FIRDatabaseQuery
允許您按鍵或值FIRDatabaseQuery
進行排序和過濾。 在您的情況下,您可以使用queryEqualToValue
查找與usernamesTaken
匹配的usernameTxtField.text
子代。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.