runTransactionBlock导致主线程

时间:2018-01-28 06:30:31

标签: swift firebase firebase-realtime-database

我有一个应用,当用户点击UIButton时,  1.我在Firebase中更新了一个孩子(比如tapCount)

  1. 使用图像加载ViewController。
  2. 我正在使用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)
        }
    

1 个答案:

答案 0 :(得分:0)

我可以在obj-c中看到相同的问题。 runTransactionBlock()立即返回,但是在调用andCompletionBlock()之前,主线程被阻塞1-2秒。

以前没有发生,更新到最新的Firebase版本后开始看到它。就我而言,我设法通过减少要更新的数据量来缩短此延迟。 firebase似乎在主线程上进行了本地缓存更新之类的操作(仅是一种理论)。