Ios Swift Firebase查询耗时一分钟

Ios Swift Firebase查询耗时一分钟,ios,swift,firebase,firebase-realtime-database,Ios,Swift,Firebase,Firebase Realtime Database,好的,我有一个Swift应用程序,正在将Firebase db加载到tableview中。问题是,获取Firebase响应和加载数据可能需要花费整整一分钟的时间。无论internet连接如何,都会发生这种情况。我在这里做错了什么吗?数据库中只有7个这样的项目,所以我看不出这是一个数据库太大的问题。我还应该注意到,通过浏览器上的Firebase控制台加载实时数据库至少需要一分钟的时间 知道这里出了什么问题吗?下面是我查询数据库的代码,以及我在Firebase控制台中加载的内容的快照 哦,我使用的是

好的,我有一个Swift应用程序,正在将Firebase db加载到tableview中。问题是,获取Firebase响应和加载数据可能需要花费整整一分钟的时间。无论internet连接如何,都会发生这种情况。我在这里做错了什么吗?数据库中只有7个这样的项目,所以我看不出这是一个数据库太大的问题。我还应该注意到,通过浏览器上的Firebase控制台加载实时数据库至少需要一分钟的时间

知道这里出了什么问题吗?下面是我查询数据库的代码,以及我在Firebase控制台中加载的内容的快照

哦,我使用的是一个免费的Firebase帐户,但我在定价选项中没有看到任何速度限制,所以我认为这不是问题所在

  private func loadItems(){

    var ref: FIRDatabaseReference!
    ref = FIRDatabase.database().reference()

    ref.child("DonationItem").observeSingleEvent(of: .value, with: { (snapshot) in

        if let values = snapshot.value as? NSDictionary {

            for (key,_) in values{

                let donationItem: NSObject = values[key] as! NSObject

                let myTitle: String! = donationItem.value(forKey: "title") as? String
                let myItemID: String! = donationItem.value(forKey: "itemID") as? String

                let myPhotoString = donationItem.value(forKey: "image") as? String
                let decodedData = NSData(base64Encoded: myPhotoString!)
                let myImage = UIImage(data: decodedData as! Data)

                let myDescription = donationItem.value(forKey: "description") as? String
                let myDate = donationItem.value(forKey: "expiration") as? String
                let myLatitude = donationItem.value(forKey: "latitude") as? Double
                let myLongitude = donationItem.value(forKey: "longitude") as? Double
                let myCoordinates = CLLocationCoordinate2D(latitude: myLatitude!, longitude: myLongitude!)
                let myUserID = donationItem.value(forKey: "userID") as? String
                let myAddress = donationItem.value(forKey: "address") as? String


                var  donated: Bool
                if let donatedInt = donationItem.value(forKey: "donated") as? Int {
                    donated = Bool(donatedInt as NSNumber)
                } else {
                    donated = true
                }

                let donation1 = DonatedItem(myTitle, myImage!, donated, myDescription!, myDate!, myCoordinates, myUserID!, myItemID!, myAddress!)
                self.addItem(item: donation1!)

                }
        }


    }) { (error) in
        print(error.localizedDescription)
    }

}
这是Firebase控制台


谢谢你的帮助

如何确定long和lat,这是在执行查询之前完成的吗?问题可能不是查询

编辑:

编码图像的大小最终是这个问题的问题。如果图像是硬编码的图像URL,则图像可能会变得相当大,并降低查询中的响应时间。注意检索图像的方式


更好的方法是将图像存储在Firebase存储中,并将其引用放在数据库中,正如@riper在对该答案的评论中所述。

如何确定long和lat,这是在执行查询之前完成的?问题可能不是查询

编辑:

编码图像的大小最终是这个问题的问题。如果图像是硬编码的图像URL,则图像可能会变得相当大,并降低查询中的响应时间。注意检索图像的方式


更好的方法是将图像存储在Firebase存储器中,并将其引用放入数据库中,正如@riper在对这个答案的评论中所说的那样。

我现在实际上只是在硬编码这两个值,因为应用程序的这一部分还没有开发出来——所以我不相信在查询之前会进行任何繁重的计算。你试过在不解码图像的情况下运行查询吗?在项目中放置一个占位符图像,并加载它作为测试。我看不到任何明显的迹象表明它为什么会慢下来,特别是对于硬编码的值。虽然使用秒表,它的加载时间现在大约为16秒(有解码和没有解码)。我计算了在web控制台中加载所需的时间,大约需要20秒。花这么长时间是正常的吗?所以我发现了问题。编码后的图像字符串非常大,导致json文件的大小为20mb。你的答案让我走上正确的轨道,因此我将奖励你答案,因为谢谢你可能想将这些图像存储在Firebase存储中,并在实时数据库中对其进行引用。AFAIK建议在实时数据库中最多存储10MB。最重要的是,如果你有很多这样的功能,那么将其存储在存储器中会便宜得多。实际上,我现在只是对这两个值进行硬编码,因为应用程序的这一部分还没有开发出来——因此我不相信在查询之前会进行任何繁重的计算。你是否尝试过在不解码图像的情况下运行查询?在项目中放置一个占位符图像,并加载它作为测试。我看不到任何明显的迹象表明它为什么会慢下来,特别是对于硬编码的值。虽然使用秒表,它的加载时间现在大约为16秒(有解码和没有解码)。我计算了在web控制台中加载所需的时间,大约需要20秒。花这么长时间是正常的吗?所以我发现了问题。编码后的图像字符串非常大,导致json文件的大小为20mb。你的答案让我走上正确的轨道,因此我将奖励你答案,因为谢谢你可能想将这些图像存储在Firebase存储中,并在实时数据库中对其进行引用。AFAIK建议在实时数据库中最多存储10MB。最重要的是,如果你有很多这样的东西,把它们储存在仓库里会便宜得多。