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.
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.
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.
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.
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.
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].
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.
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.
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.
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.
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.