CKAssets 的 CKQuery 很慢

Posted

技术标签:

【中文标题】CKAssets 的 CKQuery 很慢【英文标题】:CKQuery slow with CKAssets 【发布时间】:2016-05-01 15:52:05 【问题描述】:

当我获取具有字符串(或其他)字段的记录时,它需要不到 1 秒:

 let query = CKQuery(recordType: "Messages", predicate: NSPredicate(format: "TRUEPREDICATE"))
    NSLog("Started fetching")
    self.publicDb.performQuery(query, inZoneWithID: nil)  (records, error) in
        NSLog("Finished fetching")
        print(records!.count)
    

但是,当此记录类型包含 CKAsset 时,查询时间会上升到至少 3 秒。当我要加载 100kb 的图像时,这是不可接受的。当我将资产作为参考放入并从那里加载时也是如此。我可以做些什么来加快对包含资产的记录的查询,或者有没有其他方法可以更有效地存储资产?

【问题讨论】:

1) 与纯文本字段相比,资产很大。他们将需要更长的时间。除了使它们变小之外,您无能为力。 2) 使用CKQueryOperation 而不是performQuery。它速度更快,灵活性更大。 您可以/可以将资产存储在其他地方吗?使用来自不同来源的 API,例如 Dropbox。我也读到,在生产中事情会更快,但最好依靠它。其他解决方案,使用您自己的 http 服务器作为后备存储,或者确实使用链接并且根本不下载它。 【参考方案1】:

使用操作并设置服务质量:

CKQueryOperation *queryOperation = [[CKQueryOperation alloc] initWithQuery:query];

queryOperation.qualityOfService = NSQualityOfServiceUserInitiated;

如果不设置qualityOfService,会得到后台级别,会很慢。

【讨论】:

这是一个很好的答案。最快(但成本最高)的qualityOfServiceNSQualityOfServiceUserInteractive

以上是关于CKAssets 的 CKQuery 很慢的主要内容,如果未能解决你的问题,请参考以下文章

win10电脑打开此电脑资源管理器任务管理器软件等突然很慢很慢,cup内存磁盘利用率却很低

SAP migo这个事物代码在做操作的时候,多人操作同一个事务代码时很慢很慢,是啥原因?

jsp做的网页,用tomcat测试时读数据库数据时很慢很慢,是啥原因?

公司网络很慢很卡的原因分析与处理

数据结构

selenium 脚本驱动chrome浏览器很慢