2015-02-23 28 views
0

當我的應用程序加載時,我導出一些breeze實體並將它們存儲在本地緩存中,以便稍後當我必須再次使用這些實體時,我將它們從本地存儲導回,並在本地執行查詢。Breeze import實例

有一個實體有84389行。我注意到importEntites需要更長的時間來執行這個實體。有什麼方法可以加速這個嗎?

var entities = manager.getEntities('Client'); 
var exportedEntity = manager.exportEntities(entities, { includeMetadata: false }); 

我正在將exportedEntity存儲在緩存中。

我從緩存中取出後,將上述exportedEntity導入到entitymanager中。

entityManager.importEntities(exportedEntity); 

以上聲明對於客戶實體需要更長的時間。客戶在桌上有80K行。我不確定這是否會降低importEntities方法的執行速度。 我也在導入實體後在本地執行查詢。

+0

不確定一個實體有84389行的含義。 – 2015-02-23 18:57:29

+0

我的意思是說,對於在數據庫中有84389行(大量數據)的實體,執行importEntity操作需要更長的時間。 – user2585299 2015-02-23 19:21:55

+0

仍然不清楚,通常一個實體代表一行。具有84K行的實體的概念是沒有意義的。你的意思是返回84K行的查詢嗎? – 2015-02-23 19:37:54

回答

1

我認爲你的意思是你有一個實體類型,Client,與84K行/實體。

這是很多的對象。我會重新考慮這些數據是否應該被視爲豐富的微風實體,或者是否應該以更簡單,更緊湊的形式作爲數據對象。我強烈傾向於後者,尤其是如果它們是隻讀的。將只讀數據表示爲實體的好處較少,並且在這些捲上,較差的性能和內存使用率更可能。請記住,並非所有數據都必須是實體,Breeze很樂意獲取實體和原始數據的混合。混合應用程序很常見。

如果你仍然想探索將它們視爲實體,你可以嘗試以下導出命令,輸出給定類型爲JSON的所有實體:

var exported = manager.exportEntities('Client', {asString:false, includeMetadata:false}); 

結果可以導入以前一樣。

var imported = manager.importEntities(exported); 

可以提高出口和進口速度(或沒有)。

之後您不必在本地查詢。所有導入的實體都在imported.entities

+0

謝謝你的回答。我會嘗試asString:false參數。之後我在本地執行查詢,因爲我想在訪問它之前將排序和謂詞參數應用於我的結果。 – user2585299 2015-02-24 19:20:04

+0

再次請您考慮將這些數據作爲實體處理是否合適。您還必須謹慎嘗試JSON字符串化和解析這麼多數據,甚至是否適合本地存儲。這並非嚴格意義上的Breeze性能問題。 – Ward 2015-02-25 00:13:47

+0

我試過JSON stringify但沒有影響任何東西。如果不是實體,您是否可以建議在應用程序中處理客戶端數據的方法?幸運的是,它的只讀數據,正如你所提到的那樣,並不一定是微風實體。 – user2585299 2015-02-25 14:00:31