我正在使用解析作爲雲存儲,並結合本地數據存儲進行一般訪問。我發現查詢本地數據存儲需要比我預期的要長得多。使用數據填充表格或更新圖形視圖時,這一點尤爲明顯。 Coredata中的等效函數幾乎是瞬時的,結果非常好。雖然我不指望coredata的性能,但它比我預期的離線訪問要慢得多,我想知道我是否做錯了什麼?解析本地數據存儲性能
下面是一個例子查詢:
PFQuery *query = [PFQuery queryWithClassName:LOCATION_OBJECT];
[query fromLocalDatastore];
[query whereKey:MESSAGE_TO_FIELD equalTo:user.username];
[query orderByDescending:CREATED_FIELD];
NSLog(@"Query started");
NSArray* res = [query findObjects];
NSLog(@"Query finished, found %lu objects", (unsigned long)[res count]);
在2015年iPad的迷你執行排序定時是我看到如下:
2015-06-16 18:56:38.883 app[1744:1668474] Query started
2015-06-16 18:56:38.885 app[1744:1668474] Warning: A long-running operation is being executed on the main thread.
Break on warnBlockingOperationOnMainThread() to debug.
2015-06-16 18:56:39.177 app[1744:1668474] Query finished, found 17 objects
我也明白,分析是提供遠遠超過只是一個數據庫,但這個查詢需要0.292秒,這似乎是一個年齡。對於我的應用程序,我經常在用戶瀏覽屏幕時使用這種操作。隨着coredata的結果非常好,解析滯後非常明顯。值得一提的是,在模擬器上的結果是相似的。當你做這種事情時警告解析問題並不令人鼓舞,但無論如何,我的問題有兩個:
1)我是否錯過了Parse中的任何性能調整/設置? 2)有其他使用Parse的人是否找到類似的表現或有任何建議?
此時,看起來我需要在應用程序中使用coredata並編寫自己的例程來將數據推送到Parse的雲,這比我所期望的要多得多。
謝謝你的時間。
更新30Jun15
感謝您的意見,按照這些意見,這裏是從做解析它要你做的方式例如性能。與以前一樣,與coredata相比,表現仍然很差。示例代碼:
PFQuery *query = [PFQuery queryWithClassName:LOCATION_OBJECT];
[query fromLocalDatastore];
[query whereKey:MESSAGE_TO_FIELD equalTo:user.username];
[query orderByDescending:CREATED_FIELD];
NSLog(@"Query started ... ");
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
NSLog(@"Query finished ... ");
if(!error)
NSLog(@"Found %lu message records in local datastore", (unsigned long)[objects count]);
else
NSLog(@"Parse error pulling messages from datastore: %@ %@", error, [error userInfo]);
}];
性能在同一ipad公司:
2015-06-30 10:32:09.633 MvBii[205:5172] Query started ...
2015-06-30 10:32:09.948 MvBii[205:5172] Query finished ...
2015-06-30 10:32:09.948 MvBii[205:5172] Found 100 message records in local datastore
查詢需要0.315秒。現在,和以前一樣,我並不是說這本身就不好,可能對於很多應用程序來說這很不錯,但它比coredata差幾個數量級,而且對我的應用程序來說太慢了。當用戶在屏幕上瀏覽圖形時,由於此查詢而繪製圖形,並且我無法使用解析來快速更新屏幕,以響應用戶輸入。使用coredata的結果是非常好的。
我的主要問題是這個查詢時間是否符合其他人的經驗?我想知道我的應用程序或數據集是否有什麼特殊之處?數據集不大(< 200項),解析對象只是字符串和整數。我仍然真的想爲它提供的所有其他設施使用Parse。也許這只是我的期望已經關閉,但對於基本查詢來說似乎很長時間。
它不是一個解析結束問題,它是一個開發結束的問題。該警告明確指出應該改變什麼(主線程上長時間運行的任務),換句話說,對於表或任何接口更改所做的更新應在主線程中完成,所有其他異步調用都不應該是這樣。在後臺執行查詢並在主線程的視圖中更新結果。 – soulshined
感謝您的評論。在應用程序本身中,我確實將所有任務推送到了後臺。當然,從性能角度來看,這會讓事情變得更慢。我擔心的關鍵是執行查詢所需的時間 - 按照我的示例。在我的應用程序中,屏幕在用戶導航時呈現動畫效果,動畫很差,因爲查詢結果時間太長。作爲Parse用戶,您是否有關於本地數據存儲查詢時間的任何信息?特別是與Coredate相比? – pyrrhoofcam
您不在後臺線程中執行查詢,如上所述。而不是使用'findObjects'使用[findObjectsInBackgroudWithBlock](https://parse.com/docs/ios/api/Classes/PFQuery.html#//api/name/findObjectsInBackgroundWithBlock :)然後當你用數組填充你的表視圖時確保你正在主線上做這個部分。大量的教程,甚至在SO上。 – soulshined