Descartar pestaña en Chrome: un experimento que ahorra memoria

Addy Osmani
Addy Osmani

Una de las prioridades del equipo es reducir la huella de memoria de Chrome este año. Ya observamos una reducción de hasta el 45% en el uso de memoria de Gmail gracias a las mejoras en el proceso de recolección de elementos no utilizados de V8, pero recién estamos empezando. Uno de nuestros próximos experimentos sobre el uso de memoria está dirigido a los acaparadores de pestañas (como yo). Se llama Descarte de pestañas.

No todas las pestañas abiertas se utilizan como pestañas. Si queda poca memoria, Chrome puede descartar pestañas en segundo plano que no son interesantes.

La opción para descartar pestañas está disponible como experimento en Chrome 46 y versiones posteriores.

Información general

Por lo general, para cada pestaña que tienes abierta, el proceso del renderizador tarda alrededor de 50 MB por pestaña, aunque la mayoría de las personas usan solo una pestaña a la vez. Si tienes 10 pestañas abiertas, se usan al menos 450 MB de memoria solo para mantener el estado de las pestañas en segundo plano. Esto puede volverse un poco difícil de manejar con el tiempo.

Memoria requerida por pestaña

Uno de nuestros objetivos es reducir la memoria que se usa en las pestañas que no estás usando. Si veo qué pestañas consumen la memoria de mi sistema en el Administrador de tareas de Chrome, en realidad solo estoy "usando" uno o dos de los sitios que aparecen a continuación, mientras que las otras pestañas en segundo plano no están en uso.

Administrador de tareas de memoria requerida

Ahí es donde el descarte de pestañas puede ayudar a reducir nuestro uso de memoria.

Descartando pestañas sin usar

El descarte de pestañas le permite a Chrome descartar automáticamente las pestañas que no te interesan cuando detecta que la memoria del sistema se está agotando. ¿Qué entendemos por descartar? Bueno, una pestaña descartada no va a ninguna parte. La cerraremos, pero seguirá estando visible en la barra de pestañas de Chrome. Si vuelves a una pestaña que se descartó, se volverá a cargar cuando hagas clic en ella. El contenido del formulario, la posición de desplazamiento, etc., se guardan y se restablecen de la misma manera que durante la navegación de las pestañas hacia adelante y atrás.

También tenemos otra función nueva que permite almacenar en caché todos los recursos de las pestañas de manera local, que funciona bien con la función para descartar pestañas cuando no tienes conexión. Cuando se reactive la pestaña, te ofrecemos la opción de volver a cargar la versión almacenada en caché que se cargó antes a través de la red. Para habilitar la recarga de páginas desde la caché, puedes probar otro experimento en chrome://flags/#show-saved-copy.

Para probar el descarte de pestañas hoy mismo, habilítalo a través de chrome://flags/#enable-tab-discarding y reinicia Chrome. Puedes controlar si está habilitada o inhabilitada en la misma página de chrome://flags de Chrome.

Habilita la pestaña que descarta la captura de pantalla.
Captura de pantalla del botón para reiniciar.

Una nueva página llamada chrome://discards te permite enumerar las pestañas que están abiertas en ese momento. Además, intentamos compartir información sobre qué tan interesantes (creemos) te resultan, de la más a la menor.

Captura de pantalla de la página de pestañas descartadas.

Para probar la función, puedes llevar a cabo el comportamiento de navegación normal hasta que el sistema se encuentre en un modo de memoria insuficiente o, de manera alternativa, activar una pestaña descartada de about:discards haciendo clic en "Descartar pestaña ahora". Esto descartará la última pestaña de la lista. También puedes descartar una pestaña en particular de la lista si haces clic en el botón “Descartar” correspondiente. Aparecerá una pestaña descartada con el prefijo [Descartadas].

Captura de pantalla de ejemplo de la pestaña descartada.

La acción de descartar pestañas descarta las pestañas en este orden:

  • Páginas internas, como la página Nueva pestaña, los favoritos, etc.
  • Pestañas seleccionadas hace mucho tiempo
  • Pestañas seleccionadas recientemente
  • Apps que se ejecutan en una ventana
  • Pestañas fijas
  • La pestaña seleccionada

Habilitamos la pestaña que descarta el experimento en Chrome Canary para Windows y Mac OS. Próximamente, se implementará una implementación de Linux.

Las pestañas fijas también se tienen en cuenta para determinar si se descartan o no.

Inspiración: "Hola, gran suspensión"

Si descartar pestañas te suena familiar, es probable que hayas encontrado extensiones de Chrome útiles que te ofrecen una versión un poco más sencilla de esta idea, como The Great Suspender. El objetivo de Great Suspender es reducir la memoria de Chrome y el uso de GPU mediante la suspensión de pestañas después de un período personalizado de inactividad.

Captura de pantalla de la suspensión.

Al igual que cuando descartas pestañas, puedes anular su suspensión cuando necesites interactuar con ellas nuevamente. Great Suspender mantiene el título y el ícono de página de cada pestaña, y muestra las pestañas suspendidas en estado atenuado, lo que permite volver a ellas en cualquier momento.

Captura de pantalla del ícono de página de pestañas suspendidas.

Se suspendieron las pestañas en segundo plano que no estoy usando activamente, lo que ahorra memoria. Sin embargo, las pestañas que sigo usando de forma activa (GitHub y YouTube) siguen ejecutándose con normalidad.

De hecho, tuvimos una conversación excelente con el autor de la extensión Great Suspender mientras se desarrollaba el descarte de pestañas, y les alegra ver que abordamos este problema de forma nativa de maneras más eficientes de las que podría hacerlo una extensión, como perder el estado de las inacciones de tus usuarios.

Mejoras futuras: el serializador de pestañas

El serializador de pestañas es un trabajo futuro que creemos que podría generar mejoras significativas en nuestro enfoque actual de descarte de pestañas. Toma el contenido de una pestaña de Chrome y serializa su estado *actual* en un BLOB binario. Este BLOB binario se puede deserializar en una pestaña más adelante.

El serializador serializaría casi todo lo que Chrome, Blink y V8 necesitan para preservar correctamente una pestaña (algo que las extensiones de Chrome que abordan este problema históricamente no han podido solucionar con facilidad). La serialización incluiría los elementos sospechosos habituales: el DOM (con mucho WebGL y Canvas incluidos), CSS y el estado de la VM de JavaScript V8.

Captura de pantalla del concepto de serializador

Si usas Android o ChromeOS, es posible que sepas que (al igual que el experimento de descarte de pestañas que abordamos en esta publicación) eliminamos las pestañas en segundo plano de manera intensa para garantizar que el uso de memoria sea bajo. El problema con la forma en que abordamos esto fue que tu pestaña perdía *todo* su estado.

Cuando volvieras a mostrar interés en la pestaña, tendríamos que volver a cargarla y toda tu interacción con ella se perdería. El serializador de pestañas aborda este problema de una manera que te lleva de vuelta a casi exactamente lo que eras, sin necesidad de volver a la red. Esperamos compartir más información sobre este trabajo más adelante.

Prueba la función de descartar pestañas y danos tu opinión

Nos encantaría saber si esta función es útil para ti y cómo podríamos mejorar. Pruébala, pruébala (especialmente si te gusta el acaparador de pestañas) y danos tu opinión en los comentarios. :) También te recomendamos que presentes tickets para cualquier error que encuentres en crbug.com.