2017-01-02 25 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

相关问题