Beacon API
==========

**Экспериментальная возможность:** **Это экспериментальная технология**  
Так как спецификация этой технологии ещё не стабилизировалась, смотрите таблицу совместимости по поводу использования в различных браузерах. Также заметьте, что синтаксис и поведение экспериментальной технологии может измениться в будущих версиях браузеров, вслед за изменениями спецификации.

Интерфейс **`Beacon`** используется для планирования асинхронного и неблокирующего запроса к веб-серверу. **`Beacon`** запросы используют метод HTTP POST, и обычно не требуют ответа. Запросы гарантированно будут инициированы до того, как страница будет выгружена, и они выполняются до конца, не требуя блокирующего запроса (например `XMLHttpRequest`).

Например, вариантом использования Beacon API может быть логирование активности или отправка аналитики на сервер.

Пример кода интерфейсов, описанных в этом документе, включён в раздел *Использование Beacon API (en-US)*.

Зачем использовать Beacon?
--------------------------

Интерфейс `Beacon` отвечает потребностям аналитического и диагностического кода, который обычно пытается отправить данные на веб-сервер перед выгрузкой документа. Отправка данных хоть на секунду раньше может привести к упущенной возможности сбора данных. В любом случае, обеспечение того, чтобы данные отправлялись во время выгрузки документа, является чем-то, что традиционно было трудным для разработчиков.

Пользовательские браузеры обычно игнорируют асинхронные `XMLHttpRequests` сделанные в обработчике выгрузки. Для решения этой проблемы, аналитический и диагностический код обычно создаёт синхронный `XMLHttpRequest` в обработчике `unload (en-US)` или `beforeunload (en-US)` для отправки данных. Синхронный `XMLHttpRequest` заставляет браузер отложить выгрузку документа и делает следующую навигацию более медленной. Следующая страница ничего не может сделать, чтобы избежать этого ощущения низкой производительности при загрузке страницы.

Есть и другие методы, используемые для проверки предоставления данных. Одним из таких методов является задержка отправки данных путём создания элемента Image и установки его атрибута `src` в обработчике выгрузки. Поскольку большинство браузеров откладывают выгрузку для завершения ожидающей загрузки изображения, данные могут быть отправлены во время выгрузки. Другой метод заключается в создании неработающего цикла, который в течение нескольких секунд будет висеть в обработчике выгрузки, чтобы задержать выгрузку и отправить данные на сервер.

Эти методы представляют плохие шаблоны программирования, некоторые из них ненадёжны и приводят к восприятию плохой производительности при загрузке страницы для следующей навигации. API-интерфейс Beacon предоставляет стандартный способ решения этих проблем.

Глобальный контекст
-------------------

Интерфейс `Beacon API's` предоставляет метод `Navigator.sendBeacon()`, который используется для отправки *beacon* данных на сервер в *глобальный браузерный контекст*. Метод принимает два аргумента: URL и данные для отправки в запросе. Аргумент data является необязательным, и его тип может быть `ArrayBufferView` (en-US), `Blob`, `DOMString` или  `FormData` . Если браузер успешно поставил в очередь запрос на доставку, то метод возвращает `true` либо возвращает `false` в противном случае.

Рабочий контекст
----------------

Интерфейс `Beacon API's` предоставляет метод `Navigator.sendBeacon()`, который используется для отправки *beacon* данных на сервер из *`worker global scope` (en-US)*. Метод принимает два аргумента: URL-адрес и данные для отправки в запросе. Аргумент `data` является необязательным, и его тип может быть `ArrayBufferView` (en-US), `Blob`, `DOMString`, или `FormData`. Если браузер успешно поставил в очередь запрос на доставку, то метод возвращает `true` либо возвращает `false` в противном случае.

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Смотрите также
--------------

* `WorkerGlobalScope` (en-US)
* Beacon standard
* Beacon CanIUse data
* Intercepting beacons through service workers; Ehsan Akhgari; 2015-Apr-08