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

geo*_*ips 8 javascript performance jquery json

当我使用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);
        }
    });
Run Code Online (Sandbox Code Playgroud)

反正是否有覆盖响应的代码,所以我可以将解析分成几部分并希望最小化对ui的阻塞?还是有另一种方法来解决这个问题.我正在使用铬和铬金丝雀,我在两者中得到相同的结果.

提前致谢

jfr*_*d00 8

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

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

要将解析拆分为多个部分,您必须更改jQuery ajax调用以返回原始文本,并且您必须创建自己的JSON解析器,它可以在块中执行工作,setTimeout()以便UI可以保持活动状态解析时.这将是一项可以接受的工作量.我假设您从一个现有的JSON解析器开始,然后您必须修改它以便以一种可以在块中工作的方式保存它的状态.

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

有关如何以块的形式处理大数据的一些替代想法,您可以看到迭代数组而不阻塞UI的最佳方法