从 Firebase 从 URL 加载图像时,CollectionsView 性能不稳定

CollectionsView choppy performance when loading images from a URL from Firebase

从 Firebase 加载图像然后将其填充到单元格中时,性能似乎不稳定。我想这可能是因为图像没有被缓存。

这位于函数中 URL 在 vi​​ewDidLoad() 之后立即从返回的搜索结果中收集

let databaseRef = FIRDatabase.database().reference()

            databaseRef.child("palettes").queryOrdered(byChild: "top").queryEqual(toValue: "#000000").observeSingleEvent(of: .value, with: { (snapshot) in


                if let snapDict = snapshot.value as? [String:AnyObject]{

                    for each in snapDict as [String:AnyObject]{

                        let URL = each.value["URL"] as! String
                        self.URLArray.append(URL)

                        print(self.URLArray)
                    }
                }
            })

这里是填充单元格的函数:

override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath)
        let textLabel = cell.viewWithTag(2)

        let ootdImage = cell.viewWithTag(4) as! UIImageView

        if let url = NSURL(string: self.URLArray[indexPath.row]) {
            if let data = NSData(contentsOf: url as URL){
                ootdImage.image = UIImage(data: data as Data)
            }
        }

        // display images from the dataArray.
        textLabel?.backgroundColor = averageColor

        return cell

不用担心collectionsView.reloadData(),目前,我已经设置为必须手动点击按钮才能重新加载数据,但我仍然不明白为什么滚动时会有延迟,特别是因为所有数据都已收集。

性能低下是因为您正在从主线程下载每个图像,这会异步阻止 UI.Download 图像并更新集合视图单元格,这将解决性能问题。

每当您滚动时,与单元格关联的每个图像都会在主线程中下载并导致滚动延迟。