当响应非常大时,JQuery ajax会冻结ui

时间:2012-04-27 05:56:26

标签: javascript json performance jquery

当我使用JQuery ajax函数并且响应非常大~1mb时,ui会在调用success函数之前被冻结。我已经通过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的阻塞?还是有另一种方法来解决这个问题。我正在使用铬和铬金丝雀,我在两者中得到相同的结果。

提前致谢

1 个答案:

答案 0 :(得分:8)

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

  1. 将服务器响应分解为多个请求。
  2. 将解析分解为多个部分。
  3. 将响应发送给Web worker并在Web worker中解析(在旧版浏览器中不起作用)。
  4. 要将解析分解为多个部分,您必须更改jQuery ajax调用以返回原始文本,并且您必须创建自己的JSON解析器,它可以在{{1}上以块的形式进行工作这样UI可以在解析时保持活跃状态​​。这将是一项可以接受的工作量。我假设您从一个现有的JSON解析器开始,然后您必须修改它以便以一种可以在块中工作的方式保存它的状态。

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

    有关如何处理大量数据的其他想法,您可以看到Best way to iterate over an array without blocking the UI