ExpressJS将JSON数据从服务器一次性传输到客户端

时间:2017-01-02 18:32:44

标签: json node.js express memory-management

构建一个expressJS应用程序,在最初加载应用程序时,需要大约50mb(可能因压缩方法而异)JSON数据从服务器传输到客户端。我很难找到一种方法来做到这一点,因为内存使用率很高而导致客户端浏览器崩溃。我尝试过使用socket.emit,这会导致chrome中的内存使用量达到1500mb,这是不可接受的(即使使用完整的数据集也不行)。我也尝试将数据作为把手渲染调用(在app.get上)的参数传递,这似乎有效,直到我必须在客户端评估数据(我也没有因为它必须作为一个字符串传递。此时,内存使用量再次为1500mb +,导致崩溃。当我在本地使用这些数据时,我坐在舒适的500-600mb内存中。那么,在不引起问题的情况下将这些数据传输到客户端的最佳方法是什么?

数据看起来像这样:

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

2 个答案:

答案 0 :(得分:0)

  

那么,在不引起问题的情况下将[50MB JSON]传输到客户端的最佳方法是什么?

最好的方法是不要这样做。当您尝试在一次传输中向客户端发送如此多的数据时,您将始终遇到问题,而您实际上从未需要这样做,因为客户端不太可能同时需要所有这些数据。你应该做的只是加载你需要的数据,何时需要更多,然后加载更多。

你没有解释它是什么类型的数据,以及你为什么要一次性发送它,但你甚至不太可能首先需要这样做。您只需要立即发送所需的大量数据,然后根据需要请求更多数据。

答案 1 :(得分:0)

我终于可以使用本指南解决此问题:http://engineering.curiositymedia.com/blog/better-json-through-streams