Mayores vidas de los service worker de extensiones

Los trabajadores del servicio de extensión ahora pueden permanecer activos mientras reciban eventos. Esto aumenta la confiabilidad de los trabajadores de los servicios de extensión, pero tiene un inconveniente que debes evitar.

Joe Medley
Joe Medley

A partir de Chrome 110 (en versión beta a partir del 7 de febrero de 2023), los service workers de extensiones permanecen activos mientras reciban eventos. Esto corrige un problema de tiempo en la implementación anterior de los trabajadores del servicio de extensión. Es posible que se produzcan tiempos de espera cuando haya eventos nuevos en la cola de eventos y que los tiempos de espera truncen el trabajo asíncrono. Esta mejora quita la vida útil máxima de cinco minutos para los trabajadores del servicio de extensión.

En este artículo, se describe cómo cambiaron estos comportamientos.

Segundo plano

Los trabajadores de servicios de extensión se comportan principalmente como los trabajadores de servicios web, pero, además de los eventos de trabajadores de servicios, también pueden escuchar eventos de extensión. Si bien los eventos normales del trabajador de servicio extienden su vida útil, antes del lanzamiento de la versión 110, solo unos pocos eventos de la plataforma de extensiones mantenían activo un trabajador de servicio de extensión.

Por lo general, Chromium finaliza un trabajador de servicio después de que se cumple una de las siguientes condiciones:

  • El trabajador del servicio no recibió un evento durante más de treinta segundos y no hay tareas de larga duración pendientes en curso. Si un trabajador de servicio recibió un evento durante ese tiempo, se quitó el temporizador inactivo.
  • Una tarea de larga duración tardó más de cinco minutos en completarse y no se recibieron eventos en los últimos treinta segundos.

Los eventos de servicio en segundo plano nuevos que se reciben antes de que venza el temporizador inactivo o el temporizador de tareas de larga duración restablecen los temporizadores y extienden la vida útil del servicio en segundo plano.

Lamentablemente, este comportamiento no se aplicaba a los eventos de extensión. Los eventos de extensión podían activar un trabajador de servicio de extensión y mantenerlo activo hasta que se completaba el evento, pero no podían extender el temporizador inactivo de treinta segundos. Esto significaba que los trabajadores del servicio de extensión se podían finalizar en cualquier momento después de que se completaba el último evento de la extensión, incluso si el navegador acababa de enviar un evento nuevo a la extensión.

Qué cambió

A partir de Chrome 110, todos los eventos restablecen el temporizador inactivo y no se producirá el tiempo de espera inactivo si hay eventos pendientes. En otras palabras, si no hay interrupciones inesperadas, los trabajadores del servicio de extensión ahora suelen permanecer activos mientras procesan eventos de forma activa. Además, las llamadas a APIs de Chrome específicas de la extensión, como chrome.storage.local.get(), restablecerán el tiempo de espera inactivo. En particular, haz lo siguiente:

  • El trabajador de servicio finaliza después de 30 segundos de inactividad. (Recibir un evento o llamar a una API de extensión restablece este temporizador).
  • El trabajador de servicio finaliza si una sola solicitud, como un evento o una llamada a la API, tarda más de 5 minutos en procesarse.

Algunas APIs, como los mensajes nativos, proporcionan un tiempo de actividad sólido que cancela ambos temporizadores.

Seguimos trabajando para garantizar que los service workers de la extensión se cierren cuando sea posible, sin cerrar el trabajo de larga duración. Los trabajadores del servicio de extensión que se preocupan por los recursos siempre deben ceder cuando sea posible. Además, las extensiones deben prepararse para una finalización inesperada mediante la persistencia del estado. Esto protege contra eventos impredecibles, como que el usuario cierre el navegador de forma forzosa.

Foto de Paula Guerreiro en Unsplash