Я предоставляю сторонний код JavaScript, который обновляет сервер сообщениями, относящимися к событиям, происходящим на веб-странице. Сообщения ставятся в очередь до тех пор, пока я не достигну определенного размера буфера, а затем сбрасываются из очереди и отправляются через вызовы AJAX. Когда я обнаруживаю выгрузку страницы, я очищаю оставшиеся сообщения в очереди.
Моя проблема в том, что иногда сервер не получает последний пакет сообщений, который был поставлен в очередь на клиенте. Эта проблема определенно чаще встречается в мобильных браузерах, кажется, чаще встречается в Safari, чем в Chrome (не уверен), это происходит чаще, когда выгрузка является результатом отправки формы.
Я предполагаю, что в какой-то произвольный момент браузер останавливает выполнение JavaScript независимо от ожидающих событий в очереди и/или игнорируя исполняемый стек. Поскольку сообщения отправляются асинхронно, я предполагаю, что стек отправки либо никогда не вызывался, либо был остановлен до того, как был достигнут вызов AJAX.
Эта проблема кажется непостоянной даже при тестировании на одном и том же компьютере и веб-приложении, из чего следует, что мгновенная загрузка процессора играет роль.
Мои вопросы:
Когда выполнение JavaScript останавливается браузерами во время выгрузки?
Гарантированно ли исполняемый стек будет работать до завершения во время выгрузки?
Если браузер действительно произвольно прерывает выполнение, есть ли способ его отложить?
Существуют ли какие-либо другие средства для обеспечения выполнения всех событий в очереди до того, как страница будет выгружена?
Есть ли способ запросить статус очереди событий?