2017-01-02 83 views
0

我正在構建一個expressJS應用程序,該應用程序需要大約50MB(可能因壓縮方法而異)的JSON數據從服務器傳輸到客戶端最初加載。我很難找到一種方法來做到這一點,因爲內存使用率高,不會導致客戶端瀏覽器崩潰。我已經嘗試過使用socket.emit,它可能會導致內存使用率高達1500mb,這是不可接受的(甚至沒有完整的數據集)。我也試過將數據作爲handlebars render call(在app.get)上的參數傳遞,這似乎工作,直到我必須評估客戶端數據(我也不是粉絲)因爲它必須作爲字符串傳遞。此時,內存使用率再次是1500MB +,導致崩潰。當我在本地使用這些數據量時,我坐在舒適的500-600mb內存使用情況下。那麼,在不造成問題的情況下將這些數據傳輸到客戶端的最佳方式是什麼?ExpressJS JSON數據從服務器到客戶端的一次性傳輸

的數據看起來是這樣的:

var worldData = { 
    'x-164z144': { 
     'blocks': { 
       'y1': { 
        'color': 16711680, 
        'owner': 'bar456' 
       }, 
       'y5': { 
        'color': 45654815, 
        'owner': 'foo123' 
      } 
      // possibly more data here in future 
    } 
} 

回答

0

那麼,什麼是對[JSON的50MB]傳送到客戶端,而不會引起問題的最佳方式是什麼?

最好的辦法是不要這樣做。當您嘗試在一次傳輸中向客戶端發送如此多的數據時,您總是會遇到問題,並且您從不需要這樣做,因爲客戶端不太可能一次都需要全部數據。你應該做的是隻加載你需要的數據,當你需要更多,然後加載更多。

你沒有解釋它是什麼樣的數據,你爲什麼試圖一次發送它,但是你甚至不需要首先完成它。您只需要立即發送所需的大量數據,然後根據需要提供更多的數據。

+0

那麼,什麼是可以從服務器發送舒適的客戶一次數據量最大?我打算構建應用程序的方式實際上是需要所有數據的,但是如果不可行,我想我必須要解決它。 – dyarbrough

+0

@dyarbrough性能問題不僅取決於數據的大小,還取決於數據的形狀,例如深層嵌套結構與平面結構,數字和字符串等類型等。一個長的字符串不需要太多的資源,一個非常深的嵌套對象。你真的需要在你的數據和用例中進行測試。我對數據或用例一無所知,因此無法再說更多。 – rsp

+0

查看數據結構原文。這些數據非常簡單,但非常深入地嵌套。 XZ位置在最低級別,然後y位置(高度),這些位置給出了關於塊的一些信息。有什麼好的資源可以讓我更多地瞭解這個? – dyarbrough