我有一个应用,当用户点击UIButton时, 1.我在Firebase中更新了一个孩子(比如tapCount)
我正在使用transactionBlock来递增此计数,因为多个用户可能同时递增此计数。我注意到的是因为完成此Firebase事务略有延迟,应用程序等待完成它,然后在单击图像时加载View Controller。它几乎使应用程序有点迟缓。那么在不引起任何UI问题的情况下,推荐的方法是什么?有没有办法在后台线程中运行它?感谢
func incrementTapCount() {
_tapCount += 1
// update the link
ref.runTransactionBlock { (currentData:MutableData) -> TransactionResult in
currentData.childData(byAppendingPath: "tapCount").value = self._tapCount
return TransactionResult.success(withValue: currentData)
}
}
func moreCommentAction(_ sender: AnyObject) {
let postCategory = self.globalPost.postCat
if Auth.auth().currentUser?.uid != nil {
//user is logged in
// this increments the Like count when a button is tapped.
self.globalPost.incrementTapCount()
// let likeCount = self.globalPost.favoriteBoost + self.globalPost.favoriteDict.count + self.globalPost.tapCount
// likeButton.setTitle(" \(likeCount)", for: UIControlState())
}
else {
//user is not logged in, so skip incrementing the tapCount.
}
let moreCommentVC = sender.storyboard?!.instantiateViewController(withIdentifier: "MoreCommentViewController") as! MoreCommentViewController
moreCommentVC.globalPost = self.globalPost
sender.present(moreCommentVC, animated: true, completion: nil)
}
答案 0 :(得分:0)
我可以在obj-c中看到相同的问题。 runTransactionBlock()立即返回,但是在调用andCompletionBlock()之前,主线程被阻塞1-2秒。
以前没有发生,更新到最新的Firebase版本后开始看到它。就我而言,我设法通过减少要更新的数据量来缩短此延迟。 firebase似乎在主线程上进行了本地缓存更新之类的操作(仅是一种理论)。