Réduire l'empreinte mémoire de Chrome est l'une des principales priorités de l'équipe cette année. Nous avons déjà constaté une réduction de 45% de l'utilisation de la mémoire de Gmail grâce aux améliorations apportées au processus de récupération de mémoire de V8, mais nous ne faisons que commencer. L'un de nos prochains tests sur l'utilisation de la mémoire est destiné aux collectionneurs d'onglets (comme moi). Il s'agit de la suppression des onglets.

L'abandon d'onglets est disponible en tant qu'expérience dans Chrome 46 et versions ultérieures.
Contexte
Pour chaque onglet que vous avez ouvert, notre processus de rendu prend généralement environ 50 Mo par onglet, même si la plupart des utilisateurs n'utilisent qu'un seul onglet à la fois. Si vous avez 10 onglets ouverts, au moins 450 Mo de mémoire sont utilisés uniquement pour conserver l'état de l'onglet en arrière-plan. Cela peut devenir un peu lourd avec le temps.

L'un de nos objectifs est de réduire la mémoire utilisée par les onglets que vous n'utilisez pas. Si je regarde les onglets qui consomment ma mémoire système dans le gestionnaire de tâches Chrome, je n'utilise en réalité qu'un ou deux des sites ci-dessous, tandis que les autres onglets en arrière-plan sont inutilisés.

C'est là que l'abandon des onglets peut nous aider à réduire l'utilisation de la mémoire.
Supprimer les onglets inutilisés
La suppression d'onglets permet à Chrome de supprimer automatiquement les onglets qui ne vous intéressent pas vraiment lorsqu'il détecte que la mémoire système est faible. Qu'entendons-nous par "suppression" ? Un onglet supprimé ne va nulle part. Nous l'arrêtons, mais il reste visible dans la barre d'onglets Chrome. Si vous revenez à un onglet supprimé, il sera actualisé lorsque vous cliquerez dessus. Le contenu du formulaire, la position de défilement, etc. sont enregistrés et restaurés de la même manière que lors de la navigation dans les onglets avant/arrière.
Nous proposons également une autre nouvelle fonctionnalité qui permet de mettre en cache toutes les ressources d'onglet localement, ce qui fonctionne bien avec l'abandon d'onglet lorsque vous êtes hors connexion. Lorsque l'onglet est réactivé, nous vous proposons de recharger la version mise en cache qui était précédemment chargée sur le réseau. Pour activer le rechargement de la page à partir du cache, vous pouvez essayer un autre test sous chrome://flags/#show-saved-copy
.
Vous pouvez essayer la suppression d'onglets dès aujourd'hui en l'activant via chrome://flags/#enable-tab-discarding
et en redémarrant Chrome. Vous pouvez contrôler si elle est activée ou désactivée via la même page chrome://flags
de Chrome.


Une nouvelle page appelée chrome://discards
vous permet de lister les onglets actuellement ouverts. Nous essayons de vous donner un aperçu de leur intérêt (selon nous), du plus intéressant au moins intéressant.

Pour tester cette fonctionnalité, vous pouvez soit poursuivre votre comportement de navigation normal jusqu'à ce que votre système passe en mode mémoire faible, soit déclencher un abandon d'onglet depuis about:discards en cliquant sur "Supprimer l'onglet maintenant". Le dernier onglet de la liste sera alors supprimé. Vous pouvez également supprimer un onglet spécifique de la liste en cliquant sur le bouton "Supprimer" correspondant. Un onglet supprimé s'affiche avec un préfixe [Supprimé].

La suppression des onglets les supprime dans l'ordre suivant:
- Pages internes telles que la page "Nouvel onglet", les favoris, etc.
- Onglets sélectionnés il y a longtemps
- Onglets sélectionnés récemment
- Applications exécutées dans une fenêtre
- Onglets épinglés
- Onglet sélectionné
Nous avons activé le test de suppression des onglets dans Chrome Canary pour Windows et Mac OS. Une implémentation pour Linux sera bientôt disponible.

Inspiration: hey there, great suspender
Si l'abandon d'onglets vous semble familier, c'est probablement parce que vous avez déjà rencontré des extensions Chrome utiles qui vous offrent une version légèrement plus simple de cette idée, comme The Great Suspender. The Great Suspender vise à réduire l'empreinte mémoire et GPU de Chrome en suspendant les onglets après une période d'inactivité personnalisée.

Comme pour la suppression d'onglets, vous pouvez réactiver les onglets lorsque vous devez à nouveau interagir avec eux. Great Suspender conserve le titre et la favicon de chaque onglet, et affiche les onglets suspendus en mode atténué, ce qui permet de les retrouver facilement à tout moment.

Les onglets en arrière-plan que je n'utilise pas activement ont été suspendus, ce qui permet de libérer de la mémoire. Les onglets que j'utilise toujours (GitHub et YouTube) fonctionnent toujours normalement.
Nous avons eu une excellente discussion avec l'auteur de l'extension Great Suspender lors du développement de l'abandon des onglets. Il est ravi de nous voir aborder ce problème de manière native de manière plus efficace qu'une extension, par exemple en perdant l'état de vos inactions utilisateur.
Améliorations futures: le sérialiseur d'onglets
Le sérialiseur d'onglets est un travail futur qui, selon nous, pourrait entraîner des améliorations significatives de notre approche actuelle de l'abandon des onglets. Il récupère le contenu d'un onglet Chrome et sérialise son état *actuel* dans un blob binaire. Ce blob binaire peut ensuite être désérialisé dans un onglet.
Le sérialiseur sérialiserait presque tout ce dont Chrome, Blink et V8 ont besoin pour conserver correctement un onglet (ce que les extensions Chrome qui traitent ce problème n'ont historiquement pas pu réaliser facilement). La sérialisation inclut les suspects habituels: le DOM (avec beaucoup de WebGL et de canevas inclus), le CSS et l'état de la VM JavaScript V8.

Si vous utilisez Android ou ChromeOS, vous savez peut-être que (comme pour l'expérience d'abandon des onglets abordée dans cet article) nous fermons de manière agressive les onglets en arrière-plan afin de nous assurer que l'utilisation de la mémoire est faible. Le problème avec la façon dont nous avons abordé ce problème était que votre onglet perdait *tout* son état.
Lorsque vous vous intéresseriez à nouveau à l'onglet, nous devrions le recharger, et toutes vos interactions avec lui seraient perdues. Le sérialiseur d'onglets aborde simplement ce problème de manière à vous ramener presque exactement à ce que vous étiez, sans avoir à revenir au réseau. Nous vous communiquerons prochainement davantage d'informations à ce sujet.
Essayez la suppression des onglets et dites-nous ce que vous en pensez
Nous aimerions savoir si cette fonctionnalité vous est utile et comment nous pourrions l'améliorer. Essayez-la, jouez avec elle (surtout si vous êtes un collectionneur d'onglets) et dites-nous ce que vous en pensez dans les commentaires. :) Nous vous serions également reconnaissants de signaler les bugs que vous rencontrez sur crbug.com.