Почему браузер зависает при асинхронном XMLHttpRequest?

Требуется сделать POST-запрос к php-файлу, передав ему FormData. Получив данные, php делает некоторые расчеты и возвращает результат. Бэкенд - не мой. Но и вопрос в другом. Проблема такова, что при крупных введенных (и отправленных) числах бэкенд начинает тормозить и долго отдает результат. А браузер в это время почему-то подвисает, хотя запрос делается асинхронный. Причем подвисает не так что бы намертво - вкладки браузера переключаются, скролл работает, и даже вкладка закрывается (правда со второй попытки). Но все элементы на странице становятся неактивными, нельзя никуда кликнуть, выделить и т.д. Когда же бэкенд возвращает ответ - все снова "оживает".
Вот код запроса:

let xhr = new XMLHttpRequest()
xhr.open('POST', url, true)
xhr.onload = () => {
	if (xhr.status == 200) {
		//Some function call...
	}
}
xhr.send(form_data)


Делал также через fetch, async/await ивсе такое, но результат тот же.
Понятно, что надо фиксить бэкенд в любом случае, но интересует другое - насколько я понимаю, браузер же все равно не должен зависать в ожидании ответа. Почему он зависает (ну или вообще может зависать)?
  • Вопрос задан
  • 461 просмотр
Пригласить эксперта
Ответы на вопрос 1
hzzzzl
@hzzzzl
Проблема такова, что при крупных введенных (и отправленных) числах бэкенд начинает тормозить и долго отдает результат

это сколько? может быть там создается js объект на десятки мегабайт, и браузер просто не вытягивает?
shift+esc для менеджера задач в хроме, можно посмотреть сколько таб потребляет памяти или cpu
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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