Вопрос по json, performance, javascript, jquery – JQuery AJAX зависает пользовательский интерфейс, когда ответ очень велик

8

Когда я использую функцию jjuery ajax, и отклик довольно большой ~ 1 МБ, пользовательский интерфейс замораживается непосредственно перед вызовом функции успеха. Я испытал это с помощью функции JSON.parse и анализа большого количества данных. Я считаю, что эта функция используется при возврате запроса для форматирования содержимого в JSON. Вот код, который я использую.

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

Есть ли способ переопределить код ответа, чтобы я мог разбить синтаксический анализ на части и, надеюсь, минимизировать блокировку пользовательского интерфейса? или есть другой способ исправить это. Я использую Chrome и Chrome Canary, и я получаю одинаковый результат в обоих.

заранее спасибо

1 МБ JSON? 1 МБ простого текста ??? Что вы пытаетесь отобразить на одной веб-странице? Может быть, вы должны продумать свой запрос! Amberlamps
в чем проблема? в JQuery парсинг JSON? или твой код разбор JSON? Joseph
@ Амберлампс, возможно, вы имели в виду «переосмыслить»? Я обычно вижу 1 МБ или больше при загрузке карт игр JSON или карт спрайтов в кодировке base64. Это разумно, но да, иногда они излишни. Joseph
1 МБ несжатых данных GPS. Я хотел бы проверить это на этом высоком уровне данных, чтобы я мог провести стресс-тестирование, чтобы узнать возможности системы. georgephillips

Ваш Ответ

1   ответ
8

что синтаксический анализ гигантского ответа JSON вызывает задержку. Если это так, то у вас есть следующие варианты:

Break up the server response into multiple requests. Break up the parsing into multiple pieces. Send the response off to a web worker and parse it in a web worker (doesn't work in older browsers).

Чтобы разбить синтаксический анализ на несколько частей, вам нужно изменить ajax-вызов jQuery, чтобы он просто возвращал необработанный текст, и вам нужно создать свой собственный анализатор JSON, который мог бы выполнять работу порциямиsetTimeout() чтобы пользовательский интерфейс мог остаться в живых при разборе. Это было бы разумным количеством работы. Я предполагаю, что вы начнете с существующего анализатора JSON, а затем вам придется изменить его, чтобы сохранить его состояние таким образом, чтобы он мог работать порциями.

Изменение интерфейса на сервер для получения фрагментов JSON, вероятно, является более простым способом решения проблемы, если вы можете соответствующим образом изменить интерфейс к серверу.

Для некоторых альтернативных идей о том, как обрабатывать большие данные в блоках, вы можете увидетьЛучший способ перебрать массив без блокировки пользовательского интерфейса

Похожие вопросы