Почему собственные события, отправляемые сервером (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.