Reducir el espacio en memoria de Chrome es una de las prioridades principales del equipo 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 esto es solo el comienzo. Uno de nuestros próximos experimentos sobre el uso de la memoria está dirigido a los acumuladores de pestañas (como yo). Se llama Descartar pestañas.

El descarte de pestañas está disponible como experimento en Chrome 46 y versiones posteriores.
Contexto
Por cada pestaña que tengas abierta, nuestro proceso de renderización suele ocupar alrededor de 50 MB por pestaña, aunque la mayoría de las personas usan una sola pestaña a la vez. Si tienes 10 pestañas abiertas, se consumen al menos 450 MB de memoria solo para mantener el estado de la pestaña en segundo plano. Esto puede volverse un poco inmanejable con el tiempo.

Uno de nuestros objetivos es reducir la memoria que se usa en las pestañas que no estás usando. Si miro qué pestañas consumen la memoria del 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 se usan.

Aquí es donde el descarte de pestañas puede ayudar a reducir el uso de memoria.
Cómo descartar pestañas sin usar
El descarte de pestañas permite que Chrome descarte automáticamente las pestañas que no te interesan mucho cuando se detecta que la memoria del sistema está muy baja. ¿Qué entendemos por descartar? Bueno, una pestaña descartada no se va a ningún lado. Lo matamos, pero aún se puede ver en la barra de pestañas de Chrome. Si vuelves a navegar 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étera, se guardan y restablecen de la misma manera que lo harían durante la navegación de pestañas hacia adelante y hacia atrás.
También tenemos otra función nueva que permite almacenar en caché todos los recursos de la pestaña de forma local, lo que funciona muy bien con el descarte de pestañas cuando no tienes conexión. Cuando se vuelve a activar la pestaña, te ofrecemos la opción de volver a cargar la versión almacenada en caché que se cargó anteriormente 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
.
Puedes probar el descarte de pestañas hoy mismo. Para ello, 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 chrome://flags
de Chrome.


Una nueva página llamada chrome://discards
te permite ver una lista de las pestañas que tienes abiertas en este momento. Intentamos compartir información sobre qué tan interesantes (según creemos) son para ti, de la más a la menos.

Para probar la función, puedes realizar tu comportamiento de navegación normal hasta que el sistema esté en modo de memoria insuficiente o, como alternativa, activar el descarte de una pestaña desde about:discards haciendo clic en “Descartar pestaña ahora”. Se 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. Una pestaña descartada se mostrará con el prefijo [Discarded].

El descarte de pestañas descarta las pestañas en este orden:
- Páginas internas, como la página Nueva pestaña, los favoritos, etcétera
- 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 macOS, y pronto implementaremos una versión para Linux.

Inspiración: Hey there, great suspender
Si el descarte de pestañas te resulta familiar, es porque probablemente te encontraste con extensiones útiles de Chrome que te brindan una versión un poco más simple de esta idea, como The Great Suspender. El objetivo de The Great Suspender es reducir el espacio en la memoria y la GPU de Chrome suspendiendo las pestañas después de un período personalizado de inactividad.

Al igual que con el descarte de pestañas, las pestañas se pueden suspender cuando necesites volver a interactuar con ellas. Great Suspender mantiene el título y el favicon de cada pestaña, y muestra las pestañas suspendidas en un estado atenuado, lo que facilita la navegación a ellas en cualquier momento.

Se suspendieron las pestañas en segundo plano que no estoy usando de forma activa, lo que ahorra memoria. Sin embargo, las pestañas que sigo usando de forma activa (GitHub y YouTube) siguen funcionando con normalidad.
De hecho, tuvimos una gran conversación con el autor de la extensión Great Suspender mientras desarrollábamos el descarte de pestañas, y se alegra de vernos abordar este problema de forma nativa de maneras más eficientes que una extensión, como perder el estado de las inacciones del usuario.
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 más adelante en una pestaña.
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 lograr fácilmente). La serialización incluiría los sospechosos habituales: el DOM (con muchos elementos WebGL y Canvas incluidos), CSS y el estado de la VM de JavaScript V8.

Si usas Android o ChromeOS, es posible que sepas que (similar al experimento de descarte de pestañas que se describe en esta publicación) cerramos 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 abordamos esto fue que tu pestaña perdería *todo* su estado.
Si vuelves a mostrar interés en la pestaña, tendríamos que volver a cargarla y se perdería toda tu interacción con ella. El serializador de pestañas solo aborda este problema de una manera que te lleva a casi exactamente lo que estabas haciendo sin necesidad de volver a la red. Esperamos compartir más información sobre este trabajo más adelante.
Prueba la función de descarte de pestañas y danos tu opinión
Nos gustaría saber si esta función te resulta útil y cómo mejorarla. Pruébala, juega con ella (especialmente si eres un acumulador de pestañas) y danos tu opinión en los comentarios. :) También te agradeceríamos que generes tickets para los errores que encuentres en crbug.com.