将大负载发送到 Web 前端的最有效方法

问题描述 投票:0回答:1

我有一个加载大约 100k 行数据的网格,结果约为 20MB。为了获取这些数据,我们目前正在做这样的事情:

cursor.execute(sql)
data = cursor.fetchall()
return HttpResponse(data.json())

然后我们将在 JavaScript 中使用

JSON.parse
将该数据加载到网格中。从端到端,将数据从数据库获取到网格的最快方法是什么(需要注意的是,我们不允许在前端 javascript 代码中使用 sql 请求)?

我想到的可能的解决方案是:

  • 按原样发送内容,不进行压缩
  • gzip json 数据(几乎需要零工作)
  • 压缩为lz4,然后在javascript中解压(需要将cpp编译为javascript)
  • 使用其他格式,例如 protobuf 或消息包

我不关心消息的大小,我只关心将该数据显示到前端的端到端时间。基本上,最终用户需要多长时间才能得到响应。

(请注意,我不关心将数据分成块,这是一个非常具体的用例,用户要求将所有数据加载到 html 表中)

javascript json compression protocol-buffers msgpack
1个回答
0
投票

我最近做了类似的事情,通过 MQTT 接收大型 protobuf 序列化消息,现在以 HTML 表格格式将其显示给用户。

我编写了 MessageToTable,它接收 protobuf 消息并从中吐出一个 HTML 表格。

示例:

from example_pb2 import ExampleMessage
response_message = ExampleMessage() 
# parse from string, etc..
utils.MessageToTable(response_message, show_empty=False, tablefmt='html')

您可以在此处看到此操作

如果您有嵌套表,tabulate会将

<
>
转换为文字字符串,您可以通过使用
tablefmt='unsafehtml'

来克服这个问题
© www.soinside.com 2019 - 2024. All rights reserved.