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

Addy Osmani
Addy Osmani

Reducir la huella de memoria de Chrome es una de las principales prioridades del equipo este año. Ya observamos una reducción de hasta un 45% en el uso de la memoria de Gmail gracias a las mejoras en el proceso de recolección de elementos no utilizados de V8, pero esto es solo el comienzo. Uno de nuestros próximos experimentos en el uso de la memoria está destinado a los acaparadores de pestañas (como yo). Se llama Descartar pestañas.

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

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

Información general

El proceso del procesador suele tardar alrededor de 50 MB por pestaña en cada pestaña abierta, aunque la mayoría de las personas usan una sola pestaña a la vez. Si tienes 10 pestañas abiertas, hay al menos 450 MB de memoria gastados solo para mantener el estado de la pestaña en segundo plano. Esto puede volverse un poco difícil de manejar con el tiempo.

Se requiere memoria por pestaña

Uno de nuestros objetivos es reducir la memoria usada en las pestañas que no realmente estás usando. Si consulto qué pestañas consumen la memoria del sistema en el Administrador de tareas de Chrome, estoy "usando" uno o dos de los siguientes sitios mientras las otras pestañas en segundo plano no se usan.

Administrador de tareas de memoria requerida

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

Cómo descartar pestañas sin usar

Con esta función, Chrome puede descartar automáticamente las pestañas que no te interesen cuando se detecta que la memoria del sistema se está agotando. ¿Qué queremos decir con “descartar”? Bueno, una pestaña descartada no se mueve a ningún lado. Lo eliminamos, pero aún está 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 lo harían durante la navegación con pestañas hacia adelante y hacia atrás.

También tenemos otra función nueva que permite almacenar en caché todos los recursos de las pestañas de forma local, lo cual funciona bien con la opción de 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ó previamente en la red. Para habilitar la recarga de páginas desde la caché, puedes probar otro experimento en chrome://flags/#show-saved-copy.

Para probar la función de descartar pestañas hoy mismo, habilítala con chrome://flags/#enable-tab-discarding y reinicia Chrome. Puedes controlar si deseas habilitarlos o inhabilitarlos en la misma página chrome://flags de Chrome.

Habilitar pestaña para descartar captura de pantalla.
Captura de pantalla del botón para reiniciar.

Una página nueva llamada chrome://discards te permite enumerar las pestañas que están abiertas actualmente, y tratamos de compartir algunas estadísticas sobre lo interesantes (que creemos) que son para ti, de más a menos.

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

Para probar la función, puedes llevar a cabo tu comportamiento de navegación normal hasta que el sistema esté en modo de poca memoria o, como alternativa, hacer clic en "Descartar pestaña ahora" para descartar la pestaña de "about:discard". Esto descartará la última pestaña de la lista. También puedes descartar una pestaña en particular de la lista haciendo clic en el botón “Descartar” correspondiente. Se mostrará una pestaña descartada con el prefijo [Descartado].

Captura de pantalla del ejemplo de pestaña descartada.

Si descartas la pestaña, se descartarán las pestañas en este orden:

  • Páginas internas como página Nueva pestaña, 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 el experimento de descarte de pestañas en Chrome Canary para Windows y Mac OS. Pronto se implementará en Linux.

Las pestañas fijadas también se tienen en cuenta cuando se decide descartar una pestaña

Inspiración: ¡Hola, gran tirador!

Si descartar pestañas te resulta familiar, es probable que te hayas encontrado con extensiones útiles de Chrome que te ofrecen una versión un poco más simple de esta idea, como El gran Suspender. La gran suspensión tiene como objetivo reducir la huella de GPU y la memoria de Chrome mediante la suspensión de pestañas después de un período personalizado de inactividad.

Captura de pantalla de suspensión.

Al igual que con el descarte de pestañas, se puede anular la suspensión de las pestañas cuando necesites volver a interactuar con ellas. Great Suspender mantiene el título y el ícono de página de cada pestaña y muestra las pestañas suspendidas en un estado atenuado, lo que permite regresar 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 uso de forma activa, lo que permite ahorrar memoria. Sin embargo, las pestañas que todavía uso de forma activa (GitHub y YouTube) siguen funcionando con normalidad.

Conversamos muy bien con el autor de la extensión Great Suspender mientras desarrollábamos el descarte de pestañas y nos alegra ver que abordamos este problema de forma nativa, como perder el estado de las acciones de los usuarios.

Mejoras futuras: el serializador de pestañas

El serializador de pestañas es un trabajo futuro que creemos que puede generar mejoras significativas en nuestro enfoque actual para descartar 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 habían podido lograr con facilidad). La serialización incluiría los sospechosos habituales: el DOM (con gran cantidad de WebGL y Canvas incluido), 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 (de manera similar al experimento de descarte de pestañas que analizamos en esta publicación), eliminamos las pestañas en segundo plano de forma agresiva para garantizar que el uso de memoria sea bajo. El problema con la forma en que abordemos esto fue que tu pestaña perdía *todo* su estado.

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

Prueba descartar pestañas y danos tu opinión

Nos encantaría saber si esta función te es útil y cómo podríamos mejorarla. Pruébalo, pruébalo (especialmente si acaparas pestañas) y déjanos tu opinión en los comentarios. :) También te recomendamos que envíes tickets por cualquier error que encuentres en crbug.com.