Einführung in die Budget API

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.