Mit der Push Messaging API können wir Nutzern selbst dann Benachrichtigungen senden, wenn der Der Browser ist geschlossen. Viele Entwickler möchten diese Botschaften nutzen können, Inhalte aktualisieren und synchronisieren, ohne dass der Browser geöffnet ist. Eine wichtige Einschränkung: Sie müssen immer eine Benachrichtigung für jede einzelne Push-Nachricht empfangen.
Das Senden einer Push-Nachricht zum Synchronisieren von Daten auf dem Gerät eines Nutzers oder kann eine zuvor angezeigte Benachrichtigung für Nutzende und Entwickelnden zu. Gleichzeitig kann eine Web-App im Hintergrund arbeiten, ohne dass die Nutzenden Wissen offen für Missbrauch.
Budget API ist eine neue API, die es Entwicklern ermöglicht, im Hintergrund bestimmte Aufgaben zu erledigen. ohne den Nutzer zu benachrichtigen, z. B. durch ein lautes Drücken der Taste oder die Durchführung eines Hintergrunds Fetch". Ab Chrome 60 können Sie diese API und den Das Chrome-Team freut sich auf Feedback von Entwicklern.
Damit Entwickler die Ressourcen eines Nutzers im Hintergrund nutzen können, führt das Konzept eines Budgets mithilfe der neuen Budget API ein. Jedes Website eine Menge an Ressourcen basierend auf dem Nutzer-Engagement zu, die für Hintergrundaktionen verwendet werden können, wie z. B. ein stiller Anstoß, bei dem jeder Vorgang das Budget aufbraucht. Wenn der Parameter das Budget aufgebraucht wird, können Hintergrundaktionen nicht mehr ohne Nutzer ausgeführt werden. Sichtbarkeit. Der User-Agent ist für die Festlegung des Budgets die einer Webanwendung aufgrund ihrer Heuristik, z. B. dem Budget mit dem Nutzer-Engagement verknüpft sein. Jeder Browser kann seine eigene Heuristik verwenden.
Zusammenfassung: Mit der Budget API können Sie Budgets reservieren, des verbleibenden Budgets und der Kosten von Hintergrundvorgängen
Budget reservieren
Ab Chrome 60 ist die Methode navigator.budget.reserve()
verfügbar.
ganz ohne Flags.
Mit der Methode reserve()
können Sie ein Budget für einen bestimmten Vorgang anfordern und
gibt einen booleschen Wert zurück,
der angibt, ob das Budget reserviert werden kann. Wenn
das Budget reserviert war, ist es nicht erforderlich, den Nutzer über Ihren Hintergrund zu informieren.
arbeiten.
Im Beispiel von Push-Benachrichtigungen können Sie versuchen,
„silent-push“ Wenn reserve()
mit "true" aufgelöst wird, ist der Vorgang
Zulässig sind. Andernfalls wird „false“ zurückgegeben und Sie müssen eine Benachrichtigung
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);
});
In Chrome 60: "silent-push" ist der einzige Vorgangstyp, der verfügbar, aber Sie finden Vollständige Liste der Vorgangstypen finden Sie in der Spezifikation. Es gibt auch keine einfache Möglichkeit, das Budget für Tests oder die Fehlerbehebung zu erhöhen. einmal verwendet werden. Als vorübergehende Problemumgehung können Sie jedoch ein neues in Chrome. Leider können Sie hierfür auch den Inkognitomodus nicht verwenden, da der Budget- gibt die API im Inkognitomodus ein Budget von null zurück (obwohl es Fehler, der zu einem Fehler führt während meiner Tests).
Sie sollten reserve()
nur dann aufrufen, wenn Sie den Vorgang ausführen möchten,
zu einem späteren Zeitpunkt reservieren. Wenn Sie im Menü „Reserve“
im Beispiel oben angezeigt, aber trotzdem eine Benachrichtigung angezeigt wird, wird das Budget weiterhin verwendet.
Ein häufiger Anwendungsfall, der nicht allein durch reserve()
ermöglicht wird, ist die Möglichkeit,
einen stillen Push von einem Back-End planen. Die Budget API verfügt über APIs zum Aktivieren von
in diesem Anwendungsfall, aber sie werden noch in Chrome weiterentwickelt
die nur hinter Meldungen und / oder einem Ursprungstest verfügbar sind.
Budget API und Ursprungstests
Es gibt zwei Methoden, getBudget()
und getCost()
, die von einer Webanwendung verwendet werden können
um die Nutzung ihres Budgets zu planen.
In Chrome 60 sind beide Methoden verfügbar, wenn Sie sich für den Ursprungstest registrieren Andernfalls können Sie sie für Tests lokal verwenden, indem Sie die Methode Experimentelle Webplattformfunktionen (Öffnen Sie chrome://flags/#enable-experimental-web-platform-features in Chrome.
Sehen wir uns an, wie diese APIs verwendet werden.
Budget festlegen
Mit der Methode getBudget()
können Sie das verfügbare Budget ermitteln. Einige Browser
(wie Chrome) hat das Budget „Verringerung“. im Lauf der Zeit zu ändern, damit Sie
Sichtbarkeit: Dieses Feld gibt ein Array von BudgetStates
zurück, das Ihr Budget angibt.
künftig zu verschiedenen Zeitpunkten stattfinden.
So listen Sie die Budgeteinträge auf, die wir ausführen können:
navigator.budget.getBudget()
.then((budgets) => {
budgets.forEach((element) => {
console.log(\`At '${new Date(element.time).toString()}' \` +
\`your budget will be '${element.budgetAt}'.\`);
});
});
Der erste Eintrag ist Ihr aktuelles Budget. Es werden zusätzliche Werte angezeigt. wie hoch Ihr Budget zu verschiedenen Zeitpunkten sein wird.
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'.
Einer der Vorteile der Bereitstellung zukünftiger Budgetzuschüsse besteht darin, dass Entwickler Diese Informationen an das Backend weitergeben, um das serverseitige Verhalten anzupassen (d. h., eine Push-Nachricht wird nur gesendet, um ein Update auszulösen, wenn der Kunde über Budget verfügt. für einen stillen Stoß).
Kosten eines Vorgangs abrufen
Wenn Sie herausfinden möchten, wie viel ein Vorgang kosten wird, wird beim Aufrufen von getCost()
der Fehler
eine Zahl, die das maximale Budget angibt, das bei einem Anruf verbraucht wird.
reserve()
für diesen Vorgang.
Beispielsweise können wir herausfinden, wie viel es kostet, wenn Sie keine Benachrichtigung erhalten Sie eine Push-Nachricht (z.B. die Kosten eines stillen Push-Vorgangs), mit dem folgenden Code:
navigator.budget.getCost('silent-push')
.then((cost) => {
console.log('Cost of silent push is:', cost);
})
.catch((err) => {
console.error('Unable to get cost:', err);
});
Zum Zeitpunkt der Erstellung dieses Dokuments wird Chrome 60 Folgendes ausgeben:
Cost of silent push is: 2
Eine Sache, die Sie bei den Methoden reserve()
und getCost()
hervorheben sollten, ist, dass die
Die tatsächlichen Kosten eines Vorgangs können unter den von getCost()
zurückgegebenen Kosten sein.
Sie können möglicherweise einen Vorgang reservieren, wenn Ihr aktuelles Budget niedriger ist
als die angegebenen Kosten. Die spezifischen Details aus der Spezifikation lauten wie folgt:
folgt:
Das ist die aktuelle API in Chrome. Da das Web weiterhin neue APIs unterstützt, für die Aufgaben im Hintergrund ausgeführt werden müssen, z. B. das Abrufen im Hintergrund. Mit der Budget API können Sie die Anzahl der Vorgänge verwalten, die ohne Benachrichtigung des Nutzers ausgeführt werden können.
Wenn Sie die API verwenden, geben Sie bitte im GitHub-Repository Feedback. oder Chrome-Fehler unter crbug.com melden.