iOS uygulamam için bir sunucu arka uç olarak CloudKit kullanıyorum. Bir avuç görüntü (CKAsset) ile birlikte nispeten durağan bir veriyi barındırmak için kullanıyorum. Bu varlıkları halka açık veritabanından almam için zaman geldiğinde bir sorunla karşılaştım. Aşırı yavaş bir hızda yüklerler.CloudKit'ten CKAsset Görüntüsü Getirme Çok Yavaş
Kullanım durumum, görüntüyü koleksiyon görünümünün içindeki her hücreye yüklemek. Görüntüler yalnızca 200 kb boyutundadır, ancak getirme işleminin görüntüyü bir hücrede tamamlaması ve görüntülemesi için ortalama 2,2 saniyedir. Karşılaştırma için, benzer boyutlu stok görüntülerin URL'lerini aldım ve bunları NSURLSession kullanarak yükledim. Her bir resmin yüklenmesi sadece 0,18 - 0,25 saniye sürdü.
Görüntüleri CK'dan indirmenin farklı yollarını denedim: doğrudan kayıt, sorgu ve işlem sorgusu getirme. Hepsinin benzer sonuçları var. Ayrıca, hücre için görüntüyü ayarlamadan önce tamamlama bloğu içindeki ana sıraya geri gönderim.
Veritabanım, çeşitli veri alanlarına sahip birincil nesneye sahip olacak şekilde ayarlanmıştır. Daha sonra her fotoğrafın sadece bir ana nesneye referansı olduğu, fotoğraflar için geriye dönük referans stili sistemi kuruyorum. Bu sayede fotoğrafları ana verilere bürünmeden talep üzerine yükleyebilirim.
Bu şuna benzer:
İlköğretim Nesne: title: String, startDate: Date
Fotoğraf Nesne: Burada owner: String(reference to primary object), image: Asset
doğrudan birini almaya çalıştı örnek isteğidir fotoğraflar:
let publicDb = CKContainer.defaultContainer().publicCloudDatabase
let configRecordId = CKRecordID(recordName: "e783f542-ec0f-46j4-9e99-b3e3ez505adf")
publicDb.fetchRecordWithID(configRecordId) { (record, error) -> Void in
dispatch_async(dispatch_get_main_queue()) {
guard let photoRecord = record else { return }
guard let asset = photoRecord["image"] as? CKAsset else { return }
guard let photo = NSData(contentsOfURL: asset.fileURL) else { return }
let image = UIImage(data: photo)!
cell.cardImageView.image = image
}
}
Bu görüntü indirme işlemlerinin neden bu kadar uzun sürdüğünü anlayamıyorum, ancak makul bir süre içinde yükleyemedikleri takdirde gerçekten çok iyi bir showtopper.
Güncelleme: Daha küçük bir resim olan 23kb ile getirme işlemini denedim. Getirme daha hızlıydı, 0,3 - 1,1 saniye arasında. Bu daha iyi, ama yine de CloudKit'in sağlayabilmesi gereken şeyle ilgili beklentimi karşılamıyor.
tamamını kayıt alıyorsanız:
İşte benim tam koddur. Bu kayıtta daha fazla varlık var mı? Onu sadece görüntü alanına sınırlandırabilirsiniz.Bunun yanı sıra, yalnızca ana sıradaki kullanıcı arayüzünü güncellediğiniz son ifadeyi uygulamanız gerekir. –
@EdwinVermeer Varlıktaki kayıt, biri görüntü, diğeri sahibine referansla bir dize değeri olmak üzere iki alana sahiptir. Bu diğer satırları ana sıraya gönderimden çıkarabileceğimi biliyorum, ama hiçbir fark yaratmıyor. Getirin tamamlanma bloğu sonsuza dek sürecek olan şeydir. – Jonathan
Ne tür bir ağ üzerinde test ediyorsunuz? İşlemin önceliğini kontrol etmek isteyebilirsiniz, ayrıca kolaylık yöntemlerini kullanmak yerine kaydı el ile getirmeyi de deneyebilirsiniz. – mattsven