Swift Firebase 查询最多需要一分钟
Posted
技术标签:
【中文标题】Swift Firebase 查询最多需要一分钟【英文标题】:Swift Firebase query taking up to a minute 【发布时间】:2017-03-30 16:08:57 【问题描述】:好的,我有一个 Swift 应用程序,它在这个 Firebase 数据库中加载到一个表格视图中。问题在于,获取 Firebase 响应并加载数据可能需要整整一分钟。无论互联网连接如何,都会发生这种情况。我在这里做错了什么吗,数据库中只有 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 控制台。
感谢您的帮助!
【问题讨论】:
【参考方案1】:long 和 lat 是如何确定的,是在查询执行之前完成的吗?问题可能不是查询。
编辑:
编码的图像大小最终是这个问题的问题。如果图像是硬编码的图像 url,图像可能会变得非常大并减慢查询中的响应时间。注意检索图像的方式。
正如@riper 在对此答案的评论中所写,更好的方法是将图像存储在 Firebase 存储中并将其引用放在数据库中。
【讨论】:
实际上我现在只是对这两个值进行硬编码,因为应用程序的那部分还没有开发——所以我不相信在查询之前已经完成了任何繁重的计算。跨度> 您是否尝试过在不解码图像的情况下运行查询?在项目中放置一个占位符图像并加载它作为现在的测试。我看不出任何明显的迹象表明它可能会变慢,尤其是对于硬编码值。 是的 似乎没有什么不同。虽然使用秒表,但它现在在大约 16 秒内加载(有和没有解码)。我计时了在 Web 控制台中加载所需的时间,大约需要 20 秒。需要这么长时间是正常的吗? 所以我找到了问题所在。编码的图像字符串非常大,导致 json 文件大小为 20mb。你的回答让我走上了正确的道路,所以我会奖励你作为感谢的答案 您可能希望将这些图像存储在 Firebase 存储中,然后在实时数据库中添加对它的引用。 AFAIK 建议在实时数据库中存储多达 10MB。最重要的是,如果你有很多,将它存储在 Storage 中会便宜得多。以上是关于Swift Firebase 查询最多需要一分钟的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Swift 删除 Firebase 上超过 30 分钟的数据? [复制]