Interfejs Push Messaging API umożliwia nam wysyłanie powiadomień do użytkowników, nawet jeśli przeglądarka jest zamknięta. Wielu deweloperów chce, aby takie komunikaty były dostępne, aktualizować i synchronizować treści bez otwierania przeglądarki, ale interfejs API ma jedno ważne ograniczenie: przy każdym odebrano pojedynczą wiadomość push.
możliwość wysyłania wiadomości push w celu zsynchronizowania danych na urządzeniu użytkownika lub ich ukrycia. mogą być bardzo przydatne dla użytkowników i dla programistów, ale umożliwienie aplikacji internetowej działania w tle bez że jest ona podatna na nadużycia.
za pomocą budżetu API, to nowy interfejs API, który umożliwia programistom wykonywanie ograniczonej pracy w tle bez powiadamiania użytkownika, na przykład poprzez ciche powiadomienia czy uruchomienie tła pobrać. W Chrome w wersji 60 lub nowszej będzie można zacząć korzystać z tego interfejsu API Zespół Chrome chętnie pozna opinie deweloperów.
Aby deweloperzy mogli wykorzystywać zasoby użytkownika w tle, platforma wprowadza koncepcję budżetu za pomocą nowego interfejsu Budget API. Każdy witrynie otrzyma określoną ilość zasobów w zależności od zaangażowania użytkowników, który może wykorzystać do działań w tle, np. ciche pchnięcie, w którym każda operacja wyczerpuje budżet. Gdy budżet został wyczerpany, działania w tle nie mogą być wykonywane bez użytkownika widoczność. Klient użytkownika będzie odpowiadać za określanie budżetu jest przypisana do aplikacji internetowej na podstawie jej heurystyki, np. przydzielona kwota budżetu co można powiązać z zaangażowaniem użytkownika. Każda przeglądarka może określić własną heurystykę.
TL;DR – interfejs Budget API umożliwia zarezerwowanie budżetu, korzystanie z budżetu, uzyskanie listy pozostałego budżetu i poznanie kosztów operacji w tle
Budżet zarezerwowany
W Chrome 60 i nowszych wersjach będzie dostępna metoda navigator.budget.reserve()
bez flag.
Metoda reserve()
pozwala poprosić o budżet dla określonej operacji i
zwróci wartość logiczną wskazującą, czy budżet można zarezerwować. Jeśli
budżet został zarezerwowany, nie trzeba informować użytkownika o przeszłości
w naszej pracy.
W przykładzie powiadomień push możesz spróbować zarezerwować budżet na
„silent-push” i jeśli reserve()
zakończy się wartością true, operacja jest
jest dozwolona. W przeciwnym razie zwraca wartość „false” (fałsz) i konieczne będzie pokazanie powiadomienia.
self.addEventListener('push', event => {
const promiseChain = navigator.budget.reserve('silent-push')
.then((reserved) => {
if (reserved) {
// No need to show a notification.
return;
}
// Not enough budget is available, must show a notification.
return registration.showNotification(...);
});
event.waitUntil(promiseChain);
});
W Chrome 60 funkcja „silent-push” jest jedynym typem operacji, który jest ale możesz znaleźć pełna lista typów operacji w specyfikacji. Nie ma też łatwego sposobu na zwiększenie budżetu na testowanie lub debugowanie. celów związanych z jego użyciem. Aby tymczasowo obejść ten problem, można utworzyć nowe profil w Chrome. Nie możesz w tym celu korzystać z trybu incognito. W trybie incognito interfejs API zwróci budżet zerowy (chociaż powodujący błąd podczas testów).
Wywołuj funkcję reserve()
tylko wtedy, gdy zamierzasz wykonać swoją operację
w przyszłości. Pamiętaj, że jeśli wywołasz funkcję Zarezerwuj na
powyżej, ale nadal wyświetla się powiadomienie, budżet będzie nadal używany.
Jednym z częstych zastosowań, który nie uwzględnia tylko rozwiązania reserve()
, jest możliwość
zaplanować ciche wypychanie danych z backendu. Interfejs Budget API ma interfejsy API umożliwiające włączenie
w tym przypadku użycia, ale wciąż nad nimi pracujemy w Chrome
dostępne tylko za flagami lub w ramach wersji próbnej origin.
Budget API i testy origin
Aplikacja internetowa może używać 2 metod: getBudget()
i getCost()
aby zaplanować wykorzystanie budżetu.
W Chrome 60 obie te metody są dostępne, jeśli zarejestrujesz się w okresie próbnym origin W przeciwnym razie możesz używać ich lokalnie, włączając Eksperymentalne funkcje platformy internetowej flaga (Otwórz stronę chrome://flags/#enable-experimental-web-platform-features w Chrome).
Przyjrzyjmy się, jak korzystać z tych interfejsów API.
Sprawdź swój budżet
Dostępny budżet możesz sprawdzić, korzystając z metody getBudget()
. Niektóre przeglądarki
(np. Chrome) będą miały „Spadek udziału z budżetem” z czasem, tak by zapewnić całkowite
widoczność zwraca tablicę wartości BudgetStates
, wskazującą budżet
czy to w przyszłości.
Aby wyświetlić listę pozycji budżetu, które możemy uruchomić:
navigator.budget.getBudget()
.then((budgets) => {
budgets.forEach((element) => {
console.log(\`At '${new Date(element.time).toString()}' \` +
\`your budget will be '${element.budgetAt}'.\`);
});
});
Pierwszym wpisem będzie bieżący budżet, a wyświetlane będą dodatkowe wartości i jak będzie wyglądać budżet na różnych etapach w przyszłości.
At 'Mon Jun 05 2017 12:47:20' you will have a budget of '3'.
At 'Fri Jun 09 2017 10:42:57' you will have a budget of '2'.
At 'Fri Jun 09 2017 12:31:09' you will have a budget of '1'.
Jedną z korzyści płynących z uwzględnienia przyszłych kwot w budżecie jest to, że deweloperzy Udostępnienie tych informacji backendowi w celu dostosowania działania po stronie serwera (czyli wysyłaj wiadomość push, aby uruchomić aktualizację tylko wtedy, gdy klient ma budżet aby ciche naciśnięcie).
Określ koszt operacji
Aby dowiedzieć się, ile będzie kosztować operacja, wywołanie getCost()
zwróci
określająca maksymalną kwotę budżetu, która zostanie wykorzystana po nawiązaniu połączenia
reserve()
dla tej operacji.
Możemy na przykład dowiedzieć się, jaki był koszt niewyświetlania powiadomienia, gdy otrzyma wiadomość push (tj. koszt cichego powiadomienia push) z następującą kod:
navigator.budget.getCost('silent-push')
.then((cost) => {
console.log('Cost of silent push is:', cost);
})
.catch((err) => {
console.error('Unable to get cost:', err);
});
W momencie pisania Chrome 60 wydrukuje:
Cost of silent push is: 2
W metodach reserve()
i getCost()
warto podkreślić,
rzeczywisty koszt operacji może być niższy niż koszt zwrócony przez funkcję getCost()
.
Możesz zarezerwować operację, jeśli Twój bieżący budżet jest mniejszy
od wskazanego kosztu. Szczegóły specyfikacji są takie
obserwuje:
To jest bieżący interfejs API w Chrome, a w internecie wciąż obsługiwane są nowe które wymagają możliwości wykonywania pracy w tle, np. pobierania w tle, interfejsu Budget API można używać do: i określać liczbę operacji, które możesz wykonać bez powiadamiania użytkownika.
W miarę używania interfejsu API prześlij opinię na temat repozytorium GitHub lub zgłoś błędy w Chrome na crbug.com.