Beacon API
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since April 2018.
Экспериментальная возможность: Это экспериментальная технология
Так как спецификация этой технологии ещё не стабилизировалась, смотрите таблицу совместимости по поводу использования в различных браузерах. Также заметьте, что синтаксис и поведение экспериментальной технологии может измениться в будущих версиях браузеров, вслед за изменениями спецификации.
Интерфейс Beacon
используется для планирования асинхронного и неблокирующего запроса к веб-серверу. Beacon
запросы используют метод HTTP POST, и обычно не требуют ответа. Запросы гарантированно будут инициированы до того, как страница будет выгружена, и они выполняются до конца, не требуя блокирующего запроса (например XMLHttpRequest
).
Например, вариантом использования Beacon API может быть логирование активности или отправка аналитики на сервер.
Пример кода интерфейсов, описанных в этом документе, включён в раздел Использование Beacon API.
Зачем использовать Beacon?
Интерфейс Beacon
отвечает потребностям аналитического и диагностического кода, который обычно пытается отправить данные на веб-сервер перед выгрузкой документа. Отправка данных хоть на секунду раньше может привести к упущенной возможности сбора данных. В любом случае, обеспечение того, чтобы данные отправлялись во время выгрузки документа, является чем-то, что традиционно было трудным для разработчиков.
Пользовательские браузеры обычно игнорируют асинхронные XMLHttpRequests
сделанные в обработчике выгрузки. Для решения этой проблемы, аналитический и диагностический код обычно создаёт синхронный XMLHttpRequest
в обработчике unload
или beforeunload
для отправки данных. Синхронный XMLHttpRequest
заставляет браузер отложить выгрузку документа и делает следующую навигацию более медленной. Следующая страница ничего не может сделать, чтобы избежать этого ощущения низкой производительности при загрузке страницы.
Есть и другие методы, используемые для проверки предоставления данных. Одним из таких методов является задержка отправки данных путём создания элемента Image и установки его атрибута src
в обработчике выгрузки. Поскольку большинство браузеров откладывают выгрузку для завершения ожидающей загрузки изображения, данные могут быть отправлены во время выгрузки. Другой метод заключается в создании неработающего цикла, который в течение нескольких секунд будет висеть в обработчике выгрузки, чтобы задержать выгрузку и отправить данные на сервер.
Эти методы представляют плохие шаблоны программирования, некоторые из них ненадёжны и приводят к восприятию плохой производительности при загрузке страницы для следующей навигации. API-интерфейс Beacon предоставляет стандартный способ решения этих проблем.
Глобальный контекст
Интерфейс Beacon API's
предоставляет метод Navigator.sendBeacon()
, который используется для отправки beacon данных на сервер в глобальный браузерный контекст. Метод принимает два аргумента: URL и данные для отправки в запросе. Аргумент data является необязательным, и его тип может быть ArrayBufferView
, Blob
, DOMString
или FormData
. Если браузер успешно поставил в очередь запрос на доставку, то метод возвращает true
либо возвращает false
в противном случае.
Рабочий контекст
Интерфейс Beacon API's
предоставляет метод Navigator.sendBeacon()
, который используется для отправки beacon данных на сервер из worker global scope
. Метод принимает два аргумента: URL-адрес и данные для отправки в запросе. Аргумент data
является необязательным, и его тип может быть ArrayBufferView
, Blob
, DOMString
, или FormData
. Если браузер успешно поставил в очередь запрос на доставку, то метод возвращает true
либо возвращает false
в противном случае.
Совместимость с браузерами
BCD tables only load in the browser
Смотрите также
WorkerGlobalScope
- Beacon standard
- Beacon CanIUse data
- Intercepting beacons through service workers; Ehsan Akhgari; 2015-Apr-08