8

当我使用 JQuery ajax 函数并且响应非常大~1mb 时,ui 在调用成功函数之前被冻结。我在使用 JSON.parse 函数并解析大量数据时体验过这一点。我相信这个函数是在请求返回时使用的,将内容格式化为 JSON。这是我正在使用的代码。

$.ajax({
        url: "/sessions/" + this.get("session_id") + "/get_sample_data",
        data: params,
        dataType: 'json',
        type: "GET",
        success: function (response) {
            success(response);
        }
    });

无论如何要覆盖响应的代码,以便我可以将解析错开成部分并希望最大限度地减少对 ui 的阻塞?还是有另一种方法来解决这个问题。我正在使用 chrome 和 chrome canary,两者的结果相同。

提前致谢

4

1 回答 1

8

猜测是解析巨大的 JSON 响应是导致延迟的原因。如果是这种情况,那么您有以下选择:

  1. 将服务器响应分解为多个请求。
  2. 将解析分解为多个部分。
  3. 将响应发送给 web worker 并在 web worker 中解析它(在旧浏览器中不起作用)。

要将解析分解为多个部分,您必须更改 jQuery ajax 调用以仅返回原始文本,并且您必须创建自己的 JSON 解析器,该解析器可以分块完成工作,setTimeout()以便 UI 可以保持活跃解析时。这将是一个合理的工作量。我假设您将从现有的 JSON 解析器开始,然后您必须修改它以保存它的状态,使其可以分块工作。

如果您可以适当地修改与服务器的接口,则更改与服务器的接口以检索 JSON 片段可能是解决问题的更简单方法。

For some alternative ideas on how to process large data in chunks, you can see Best way to iterate over an array without blocking the UI

于 2012-04-27T06:03:35.440 回答