【问题标题】:Is this too much data for an AJAX request?对于 AJAX 请求,这是否有太多数据?
【发布时间】:2016-09-26 21:53:09
【问题描述】:

我有一个包含 100 到 1,000 行的 20 列网格。

如果每个单元格平均有 50 个字符,我估计一个 1000 行的网格将包含 20x50x1000 个字符 = 1MB。

该网格的数据必须由服务器在一个(或多个)AJAX 请求中返回。网格是不可编辑的……它只是表示大量信息(尤其是关于人类基因)的一种方式。

我很难决定是否应该在一个 AJAX 请求或多个 AJAX 请求中返回它。您是否认为在一个 AJAX 请求的 XML/JSON 响应中返回的数据太多(1MB)?这是反模式吗?或者看看所有数据在逻辑上如何成为一个网格的一部分是否有意义?

这更像是一个设计问题。感谢您提供任何反馈。

【问题讨论】:

标签: java ajax jersey


【解决方案1】:

您不能使用非 Ajax 请求一次加载所有数据,然后仅更新通过 Ajax 更改的单元格吗?

【讨论】:

  • 啊,数据是基于基因的。用户通常选择 100 到 1000 个基因。但它并不总是相同的基因,所以我无法预加载数据。
  • 服务器知道这100到1000个基因是什么吗?如果是这样,您可以为每个人分配一个 id。然后,您只需对一组 ID 进行 Ajax,服务器可以将其映射回实际数据。
  • 在用户选择基因之前,我们不知道基因是什么。人类基因组中有大约 20k+ 个基因,用户可以选择任意数量。
【解决方案2】:

也许将网格“状态”保留在服务器中会很有趣,因此在编辑每个字段后,您可以将新内容发送到服务器。这会增加服务器的使用率和使用的带宽,但会在用户发送“提交”命令时使其响应更快。这也将允许更快的输入验证(几乎在用户修改单元格后显示错误消息,而不是半小时后)。

作为安全方面的改进,在内存(JS 内存)中保留“脏”(已修改)字段的列表,并在其相关的 ajax 响应告诉您服务器已确认 ajax 时重置该值称呼;当用户点击“提交”时,所有仍然脏的字段都会再次发送到服务器。

也就是说,只要您远离 XML,我认为它的负载不会那么重(当然这取决于硬件和您必须服务的并发用户)。

【讨论】:

  • 哦,我应该更清楚。网格不可编辑。它仅用于查看有关基因的注释(生物途径、相关疾病、发育过程等)。这只是传达大量信息的一种方式。
【解决方案3】:

我建议您分批获取数据。即,获取前 20-25 行,或者刚好足以填充视口,然后随着用户滚动或接近前一批的末尾时逐渐加载下一批。这可能使它无缝。

考虑到您可能拥有的记录数量,一次获取所有数据可能不是一种选择。

此外,这与太多数据无关,而是与获取数据所需的时间有关。我可以向您保证(根据您操作 json 响应的方式),浏览器可以处理任意数量的数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多