Fecha de publicación: 20 de enero de 2025
A partir de Chrome 133 (febrero de 2025), las pestañas en segundo plano aptas que requieran mucho uso de la CPU se inmovilizarán cuando el modo Ahorro de energía esté activo. El objetivo es reducir el consumo de batería para los usuarios que dependen del Ahorro de energía y para los que cada punto porcentual de duración de batería es importante. Para minimizar las interrupciones, solo se inhabilitarán las pestañas en segundo plano que cumplan con criterios específicos y tengan un alto uso de la CPU.
¿Qué es la inmovilización?
La inmovilización suspende la ejecución de tareas en una página web. Esto incluye lo siguiente:
- Controladores de eventos (por ejemplo, entrada, red y sensor)
- Temporizadores
- Agentes de resolución de promesas
La inmovilización es diferente de la eliminación, en la que se descarga una pestaña de la memoria. Cuando se vuelve a enfocar una pestaña inmovilizada, se desinmoviliza automáticamente y se ejecutan las tareas en cola sin pérdida de estado.
Los eventos de inmovilización y reanudación se envían cuando se inmoviliza o reanuda una página (consulta la documentación de la API de Page Lifecycle). Estos eventos permiten que la página libere recursos no utilizados, notifique a un servidor que la página está en pausa o registre métricas.
¿Qué páginas se pueden inmovilizar?
La inmovilización se realizará en los grupos de contexto de navegación.
Por lo general, un grupo de contexto de navegación consta de una sola pestaña. Sin embargo, varias pestañas pueden pertenecer al mismo grupo cuando se usan APIs como window.open()
.
Con el Ahorro de energía habilitado, se inhabilitará un grupo de contexto de navegación si cumple con las siguientes condiciones:
- Todas las páginas del grupo se ocultaron y silenciaron durante más de cinco minutos.
- Cualquier subgrupo de fotogramas del mismo origen dentro del grupo es "intensivo en la CPU".
- El grupo no hace lo siguiente:
- Proporcionar funcionalidad de videoconferencia (detectada a través de un micrófono, una cámara, la captura de una pantalla, una ventana o una pestaña, o una RTCPeerConnection con un RTCDataChannel "abierto" o un MediaStreamTrack "en vivo")
- Controla un dispositivo externo (detectado con Web USB, Web Bluetooth, Web HID o Web Serial).
- Mantén un bloqueo web o una conexión de IndexedDB que bloquee las operaciones fuera del grupo.
La definición de "CPU intensiva" puede evolucionar, pero la intención es excluir a los clientes de correo electrónico o chat implementados de manera eficiente, o las aplicaciones de calendario que generan notificaciones.
Inmovilizar simultáneamente todas las pestañas dentro del mismo grupo de contexto de navegación minimiza las interrupciones para las apps que usan ventanas emergentes, como las que se usan para redactar mensajes o ingresar credenciales.
¿Cómo puedo preparar mi sitio?
Si tu sitio no tiene funcionalidad en segundo plano (por ejemplo, notificaciones, cargas de archivos o actualizaciones de contenido), es probable que no se vea afectado por la inmovilización.
Si tu sitio tiene funcionalidad en segundo plano, minimiza su uso de CPU en segundo plano para evitar que se considere intensivo en la CPU y, por lo tanto, se congele. Aquí tienes algunas sugerencias:
- Evita los temporizadores para las verificaciones de cambio de estado periódicas.
- Usa IntersectionObserver para detectar cuándo un elemento ingresa al viewport.
- Usa ResizeObserver para detectar cambios de tamaño de los elementos.
- Usa MutationObserver o callbacks del ciclo de vida del elemento personalizado para los cambios en el DOM.
- Considera usar sockets web, eventos enviados por el servidor, mensajes push o flujos de recuperación en lugar de un servidor de sondeo.
- Usa eventos como timeupdate y ended para cambios de audio o video.
También recomendamos migrar la funcionalidad en segundo plano a un trabajador de servicio para que no se vea afectada por la inmovilización. Además de no verse afectado por la inmovilización, un trabajador de servicio requiere menos recursos del navegador. Considera usar lo siguiente:
- API de notificaciones push
- API de Background Synchronization o API de Web Periodic Background Synchronization para recuperar actualizaciones
Los sitios pueden inhabilitar la inmovilización participando en la prueba de origen BackgroundPageFreezeOptOut. Esta prueba se descontinuará una vez que se lancen nuevas APIs para declarar trabajos importantes en segundo plano (por ejemplo, la API de notificaciones de progreso).
Puedes verificar la elegibilidad de una pestaña para inmovilizarse en chrome://discards
. Ten en cuenta que, incluso si una pestaña es apta para inmovilizarse, Chrome 133 solo la inmovilizará si requiere mucho uso de la CPU y el Ahorro de energía está activo.
Próximos pasos
La inmovilización de pestañas en segundo plano conserva energía, lo que es fundamental para los usuarios que tienen habilitado el modo de ahorro de energía.
También mejora el rendimiento de las pestañas en primer plano y ayuda a evitar la finalización de las pestañas en segundo plano, en especial en dispositivos con recursos limitados, ya que reduce el uso de la CPU y el acceso a la memoria. Por lo tanto, Chrome expandirá la inmovilización de pestañas a más situaciones (los cambios se anunciarán en blink-dev@chromium.org). Para hacerlo con una interrupción mínima de los casos de uso en segundo plano, las nuevas APIs, como la API de NotificationProgress, permitirán que las páginas declaren un trabajo en segundo plano importante y eviten que se congelen.