【问题标题】:how to render json in frontend whose size if more than 2gb如果超过 2gb,如何在前端渲染 json
【发布时间】:2016-10-20 03:05:02
【问题描述】:

GET 调用 /giveMyTree 提供了一个大小超过 2 GB 的 Json。在前端,我们正在解析该 json 并处理整个 json 并显示 json 包含的数据。

Json 结构是嵌套结构。

{

树[1]

|_ O{0}

|_ branch[50]
     |__
     |    Point[1000]
     |      |___ branch {225}
     |             :
     |             :
     |___ Line[10000]
     :       |____start{1}
     :       |           |
     :       |            __ branch{122}
     .       |                 :
     .       |                 : 
             |____end{1} 
                        | .....

     .                         :
     .                         :

}

解析整个json后显示1000个节点,10000个链接等数据。

我无法在浏览器上显示此数据,浏览器在处理此数据时崩溃或挂起。有什么方法可以将这些数据加载到浏览器并将图表显示给最终用户。

【问题讨论】:

  • 客户端这么大的数据量是非常糟糕的。页面上应该包含某种分页或根据用户请求获取更多数据的能力。检查similar SO post

标签: javascript json web-services frontend browser-cache


【解决方案1】:

使用您设计的 API,没有。浏览器必须加载 JSON 来解析它,而 2 GB 的 JSON 将在内存中创建超过 2 GB 的 JS 对象,给或取。

即使是 4K 显示器也最多可以同时显示多达 32 MB 的数据 (4K*2K*4 = 32M),如果您主要是文本,则远远少于此,因此您不需要 1 GB一次传输中的数据。

当前的浏览器在解析数百兆字节的 JSON 时存在问题,因此您必须更改 API,以便一次传输较小的块 - 您应该将每个 JSON 答案的大小降至 20 MB 以下,或者通过从通用树中删除细节(并在用户打开单个条目时获取它们),或者通过将整个树分成更小的块(仅加载根节点和所有子节点,当子节点展开时,获取子节点)。

【讨论】:

  • 谢谢亚历山大。方法你建议“只加载根节点和所有子节点,当子节点展开时,获取子子节点”
  • 我们可以在前端实现这种方法吗?就像我们在浏览器中加载整个 json 并存储在 JSON 对象中一样 [这里我假设浏览器使用主机内存,因此 json 对象存储容量取决于主机内存限制] 当用户单击任何节点时,我们仅解析该节点并显示在 UI 中。
  • 你可以试试,但我预计在 90% 的机器上浏览器会崩溃。
  • 我有足够的内存供浏览器使用,也有足够的 CPU 容量。浏览器崩溃的原因是什么?
猜你喜欢
  • 2015-05-07
  • 2011-05-29
  • 1970-01-01
  • 2015-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-18
相关资源
最近更新 更多