-
Notifications
You must be signed in to change notification settings - Fork 8k
/
index.md
41 lines (24 loc) · 6.44 KB
/
index.md
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
---
title: Beacon API
slug: Web/API/Beacon_API
---
{{DefaultAPISidebar("Beacon")}}{{SeeCompatTable}}
Интерфейс **`Beacon`** используется для планирования асинхронного и неблокирующего запроса к веб-серверу. **`Beacon`** запросы используют метод HTTP POST, и обычно не требуют ответа. Запросы гарантированно будут инициированы до того, как страница будет выгружена, и они выполняются до конца, не требуя блокирующего запроса (например {{domxref("XMLHttpRequest")}}).
Например, вариантом использования Beacon API может быть логирование активности или отправка аналитики на сервер.
Пример кода интерфейсов, описанных в этом документе, включён в раздел _[Использование Beacon API](/ru/docs/Web/API/Beacon_API/Using_the_Beacon_API)_.
## Зачем использовать Beacon?
Интерфейс `Beacon` отвечает потребностям аналитического и диагностического кода, который обычно пытается отправить данные на веб-сервер перед выгрузкой документа. Отправка данных хоть на секунду раньше может привести к упущенной возможности сбора данных. В любом случае, обеспечение того, чтобы данные отправлялись во время выгрузки документа, является чем-то, что традиционно было трудным для разработчиков.
Пользовательские браузеры обычно игнорируют асинхронные {{domxref("XMLHttpRequest","XMLHttpRequests")}} сделанные в обработчике выгрузки. Для решения этой проблемы, аналитический и диагностический код обычно создаёт синхронный {{domxref("XMLHttpRequest")}} в обработчике {{event("unload")}} или {{event("beforeunload")}} для отправки данных. Синхронный {{domxref("XMLHttpRequest")}} заставляет браузер отложить выгрузку документа и делает следующую навигацию более медленной. Следующая страница ничего не может сделать, чтобы избежать этого ощущения низкой производительности при загрузке страницы.
Есть и другие методы, используемые для проверки предоставления данных. Одним из таких методов является задержка отправки данных путём создания элемента Image и установки его атрибута `src` в обработчике выгрузки. Поскольку большинство браузеров откладывают выгрузку для завершения ожидающей загрузки изображения, данные могут быть отправлены во время выгрузки. Другой метод заключается в создании неработающего цикла, который в течение нескольких секунд будет висеть в обработчике выгрузки, чтобы задержать выгрузку и отправить данные на сервер.
Эти методы представляют плохие шаблоны программирования, некоторые из них ненадёжны и приводят к восприятию плохой производительности при загрузке страницы для следующей навигации. API-интерфейс Beacon предоставляет стандартный способ решения этих проблем.
## Глобальный контекст
Интерфейс `Beacon API's` предоставляет метод {{domxref("Navigator.sendBeacon()")}}, который используется для отправки _beacon_ данных на сервер в _глобальный браузерный контекст_. Метод принимает два аргумента: URL и данные для отправки в запросе. Аргумент data является необязательным, и его тип может быть {{domxref ("ArrayBufferView")}}, {{domxref ("Blob")}}, {{domxref ("DOMString")}} или {{domxref (" FormData ")}}. Если браузер успешно поставил в очередь запрос на доставку, то метод возвращает `true` либо возвращает `false` в противном случае.
## Рабочий контекст
Интерфейс `Beacon API's` предоставляет метод {{domxref("Navigator.sendBeacon()")}}, который используется для отправки _beacon_ данных на сервер из _{{domxref("WorkerGlobalScope","worker global scope")}}_. Метод принимает два аргумента: URL-адрес и данные для отправки в запросе. Аргумент `data` является необязательным, и его тип может быть {{domxref("ArrayBufferView")}}, {{domxref("Blob")}}, {{domxref("DOMString")}}, или {{domxref("FormData")}}. Если браузер успешно поставил в очередь запрос на доставку, то метод возвращает `true` либо возвращает `false` в противном случае.
## Совместимость с браузерами
{{Compat}}
## Смотрите также
- {{domxref("WorkerGlobalScope")}}
- [Beacon standard](https://w3c.github.io/beacon/)
- [Beacon CanIUse data](http://caniuse.com/#search=beacon)
- [Intercepting beacons through service workers](https://ehsanakhgari.org/blog/2015-04-08/intercepting-beacons-through-service-workers); Ehsan Akhgari; 2015-Apr-08