Introducción a la API de Budget

La API de Push Messaging nos permite enviar notificaciones a un usuario incluso cuando el navegador esté cerrado. Muchos desarrolladores quieren usar estos mensajes actualizar y sincronizar contenido sin que el navegador se abra, pero la API tiene hay una restricción importante: siempre debes mostrar una notificación para cada único mensaje push recibido.

Poder enviar un mensaje push para ocultar o sincronizar datos en el dispositivo de un usuario Una notificación anterior puede ser extremadamente útil para los usuarios y desarrolladores, pero permitir que una app web funcione en segundo plano sin que el usuario saber está abierto al abuso.

La API de Budget, es una nueva API diseñada para permitir que los desarrolladores realicen tareas limitadas en segundo plano sin notificar al usuario, como un envío silencioso o una ejecución en segundo plano recuperar. En Chrome 60 y versiones posteriores, podrás comenzar a usar esta API y las El equipo de Chrome está ansioso por recibir comentarios de los desarrolladores.

Para permitir que los desarrolladores consuman los recursos de un usuario en segundo plano, la Web Presenta el concepto de presupuesto con la nueva API de Budget. Cada sitio recibirá una cantidad de recursos en función del compromiso del usuario que puede consumir para las acciones en segundo plano, como un envío silencioso, donde cada operación agotará el presupuesto. Cuando se invierte el presupuesto, ya no se pueden realizar acciones en segundo plano sin usuarios visibilidad. El usuario-agente será responsable de determinar el presupuesto Se asigna a una aplicación web en función de su heurística, por ejemplo, la asignación de presupuesto. podría vincularse a la participación de los usuarios. Cada navegador puede decidir su propia heurística.

Resumen: La API de Budget te permite reservar un presupuesto, usar uno y obtener una lista del presupuesto restante y comprender el costo de las operaciones en segundo plano

Reservar presupuesto

En Chrome 60 y versiones posteriores, el método navigator.budget.reserve() estará disponible sin marcas.

El método reserve() te permite solicitar el presupuesto para una operación específica. mostrará un valor booleano para indicar si se puede reservar el presupuesto. Si se reservó el presupuesto, no es necesario notificar al usuario sobre tu el trabajo.

En el ejemplo de las notificaciones push, puedes intentar reservar presupuesto para un "silent-push" y si reserve() se resuelve con verdadero, la operación se por lo que está permitido. De lo contrario, el resultado será falso y deberás mostrar una notificación

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);
});

En Chrome 60, "silent-push" es el único tipo de operación que se disponible, pero puedes encontrar una lista completa de los tipos de operaciones en la especificación. No hay una manera sencilla de aumentar el presupuesto para pruebas o depuración. una vez usado, pero como solución temporal, puedes crear un nuevo en Chrome. Por desgracia, no puedes usar el modo incógnito en esta página La API devolverá un presupuesto de cero en modo Incógnito (aunque que genera un error durante la prueba).

Solo debes llamar a reserve() cuando quieras realizar la operación que reservando en algún momento. Ten en cuenta que si llamaste a reservar en la ejemplo anterior, pero aun así se muestra una notificación, se seguirá usando el presupuesto.

Un caso de uso común que no está habilitado solo por reserve() es la capacidad de programar un envío silencioso desde un backend. La API de Budget tiene APIs para habilitar este caso de uso, pero todavía se están trabajando en Chrome y, actualmente, solo está disponible detrás de marcas o en una prueba de origen.

Pruebas de origen y API de presupuesto

Hay dos métodos, getBudget() y getCost(), que una app web puede usar para planificar el uso de su presupuesto.

En Chrome 60, ambos métodos están disponibles si te registras en la prueba de origen. pero, por lo demás, para las pruebas, puedes usarlas de forma local habilitando el Funciones experimentales de la plataforma web (Abrir chrome://flags/#enable-experimental-web-platform-features en Chrome).

Veamos cómo usar estas APIs.

Obtén tu presupuesto

Puedes encontrar tu presupuesto disponible con el método getBudget(). Algunos navegadores (como Chrome) presentarán un decaimiento del presupuesto. con el tiempo, así que, para brindarte visibilidad. Esto muestra un array de BudgetStates que indica cuál es tu presupuesto será en varios momentos más adelante.

Para enumerar las entradas de presupuesto, podemos ejecutar lo siguiente:

navigator.budget.getBudget()
.then((budgets) => {
  budgets.forEach((element) => {
    console.log(\`At '${new Date(element.time).toString()}' \` +
      \`your budget will be '${element.budgetAt}'.\`);
  });
});

La primera entrada será tu presupuesto actual. Se mostrarán los valores adicionales. cuál será tu presupuesto en distintos puntos en el futuro.

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'.

Uno de los beneficios de incluir asignaciones presupuestarias futuras comparte esta información con su backend para adaptar el comportamiento del servidor (es decir, solo envía un mensaje push para activar una actualización cuando el cliente tiene presupuesto) para un envío silencioso).

Obtener el costo de una operación

Para averiguar cuánto costará una operación, si llamas a getCost(), se mostrará que indica la cantidad máxima de presupuesto que se consumirá si llama reserve() para esa operación.

Por ejemplo, podemos determinar el costo de no mostrar una notificación cuando recibir un mensaje push (es decir, el costo de un envío silencioso), con los siguientes código:

navigator.budget.getCost('silent-push')
.then((cost) => {
  console.log('Cost of silent push is:', cost);
})
.catch((err) => {
  console.error('Unable to get cost:', err);
});

Al momento de la redacción, Chrome 60 imprimirá lo siguiente:

Cost of silent push is: 2

Un aspecto que se debe destacar con los métodos reserve() y getCost() es que el el costo real de una operación puede ser menor que el costo que muestra getCost(). Es posible que pueda reservar una operación si su presupuesto actual es inferior. que el costo indicado. Los detalles específicos de la especificación son los siguientes: sigue:

Esa es la API actual en Chrome y, a medida que la Web sigue admitiendo nuevas APIs que requieran la capacidad de realizar tareas en segundo plano, como la recuperación en segundo plano, la API de Budget se puede usar para administrar la cantidad de operaciones que puedes realizar sin notificar al usuario.

Cuando uses la API, envía comentarios sobre el repositorio de GitHub. o informa errores de Chrome en crbug.com.