Почему собственные события, отправляемые сервером (SSE), более эффективны, чем альтернатива полизаполнения?

Может кто-нибудь объяснить, что автор имеет в виду ниже, сказав, что "потоковая передача по XHR" более эффективна, чем "опрос по XHR".

Мне очень интересно узнать, существует ли более эффективный способ потоковой передачи данных с сервера на клиент (используя XHR - это не вопрос веб-сокетов). Из того, что я могу сказать, SSE в основном просто предоставляет API для выполнения "разбитого на куски" ответа сервера и добавляет некоторые функции, такие как возобновление соединения. Произошло ли повышение производительности в реализации SSE?

Хотя полифилл будет обеспечивать согласованный API, имейте в виду, что основной транспорт XHR не будет таким эффективным:

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

Без встроенной поддержки эффективной потоковой передачи данных потока событий XHR библиотека polyfill может откатиться к опросу, длинному опросу или потоковой передаче XHR, каждый из которых имеет свои собственные затраты производительности.

Высокопроизводительная работа в сети через браузер от Ильи Григорика https://hpbn.co/server-sent-events-sse/

1 ответ

Потоковая передача XHR и SSE очень похожи с точки зрения производительности, за исключением того, что потоковая передача XHR обычно считается "неподдерживаемой функцией в современных браузерах", поскольку нет способа очистить буфер, если вы не переподключитесь. Этот ответ объясняет все это и предлагает очень громоздкий обходной путь: эффективная обработка памяти с использованием XMLHttpRequest.

Реализация SSE просто очищает буфер после получения каждого события, см. https://dxr.mozilla.org/mozilla-central/source/dom/base/EventSource.cpp.

Другие вопросы по тегам