Suppression d'onglets dans Chrome : une expérience qui permet de préserver la mémoire

Addy Osmani
Addy Osmani

Réduire l'encombrement de la mémoire de Chrome est l'une des priorités majeures de l'équipe cette année. Nous avons déjà constaté une réduction allant jusqu'à 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 ce n'est que le début. L'une de nos prochaines expériences sur l'utilisation de la mémoire est destinée aux collectionneurs d'onglets (comme moi). Cette opération est appelée suppression d'onglet.

Les onglets ouverts ne sont pas tous utilisés. Si la mémoire est insuffisante, Chrome peut supprimer les onglets en arrière-plan qui ne vous intéressent pas.

La suppression d'onglets est disponible en tant que fonctionnalité expérimentale dans Chrome 46 et versions ultérieures.

Contexte

Notre processus de moteur de rendu prend généralement environ 50 Mo par onglet ouvert, 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 des onglets en arrière-plan. Cela peut devenir un peu pénible avec le temps.

Mémoire requise par onglet

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

Gestionnaire des tâches de mémoire requise

C'est là que la suppression des onglets peut contribuer à 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 lorsqu'il détecte que la mémoire système est assez faible. Qu'entend-on par "rejet" ? Un onglet supprimé ne sert à rien. Nous le supprimons, mais il est toujours visible dans la barre d'onglets de 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 avant/arrière par onglet.

Nous avons également une autre fonctionnalité qui permet de mettre en cache toutes les ressources d'onglets localement, ce qui fonctionne très bien avec la suppression des onglets lorsque vous êtes hors connexion. Lorsque l'onglet est réactivé, vous pouvez actualiser la version mise en cache précédemment chargée sur le réseau. Pour activer l'actualisation des pages à partir du cache, vous pouvez essayer un autre test sous chrome://flags/#show-saved-copy.

Vous pouvez essayer la suppression d'onglets aujourd'hui en l'activant via chrome://flags/#enable-tab-discarding, puis en relançant Chrome. Vous pouvez contrôler leur activation ou désactivation depuis la même page chrome://flags Chrome.

Activer la suppression des captures d'écran par onglet.
Capture d'écran du bouton "Relancer".

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 (du moins au moins) selon nous.

Capture d'écran de la page des onglets supprimés.

Pour tester cette fonctionnalité, vous pouvez soit appliquer votre comportement de navigation normal jusqu'à ce que votre système soit en mode de mémoire insuffisante, soit déclencher la suppression d'un onglet d'about:discards en cliquant sur "Supprimer l'onglet maintenant". Cela supprimera le dernier onglet de la liste. Vous pouvez également supprimer un onglet particulier de la liste en cliquant sur le bouton "Supprimer" correspondant. Un onglet supprimé s'affiche avec le préfixe [Removeed].

Capture d'écran d'un exemple d'onglet supprimé.

La suppression d'onglets supprime les onglets dans cet ordre:

  • Pages internes telles que la page "Nouvel onglet", les favoris, etc.
  • Onglets sélectionnés il y a longtemps
  • Onglets récemment sélectionnés
  • Applications exécutées dans une fenêtre
  • Onglets épinglés
  • Onglet sélectionné

Nous avons activé le test de suppression d'onglets dans Chrome Canary pour Windows et Mac OS, et une implémentation Linux sera bientôt disponible.

Les onglets épinglés sont également pris en compte lorsque vous cherchez à supprimer ou non un onglet.

Idées: salut, bonne blouse

Si la suppression d'onglets vous semble familière, c'est parce que vous avez probablement rencontré des extensions Chrome utiles qui vous donnent une version un peu plus simple de cette idée, telles que The Great Suspender. Il vise à réduire l'encombrement de la mémoire et du GPU de Chrome en suspendant des onglets après une période d'inactivité personnalisée.

Capture d'écran du Suspendu

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

Capture d'écran de la favicon des onglets suspendus.

Les onglets en arrière-plan que je n'utilise pas activement ont été suspendus, ce qui permet d'économiser de la mémoire. Toutefois, les onglets que j'utilise encore activement (GitHub et YouTube) continuent de fonctionner normalement.

Nous avons beaucoup discuté avec l'auteur de l'extension Great Suspender lors du développement de la suppression des onglets, et il est heureux de voir que nous nous sommes attaqués à ce problème de manière plus efficace qu'une extension, par exemple la perte de l'état de vos absences d'action de l'utilisateur.

Améliorations futures: sérialiseur d'onglets

Nous pensons que le sérialiseur d'onglets va entraîner des améliorations significatives de notre approche actuelle concernant la suppression d'onglets. Il prend 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érialisait presque tout ce dont Chrome, Blink et V8 ont besoin pour conserver correctement un onglet (ce que les extensions Chrome qui remédiaient habituellement à ce problème n'ont jamais été faciles à réaliser). La sérialisation inclura les éléments suspects habituels: le DOM (avec beaucoup de WebGL et de Canvas), CSS et l'état de la VM JavaScript V8.

Capture d'écran du concept de sérialiseur

Si vous utilisez Android ou ChromeOS, vous savez peut-être que nous supprimons les onglets en arrière-plan de manière agressive (comme pour l'expérience de suppression d'onglets abordées dans cet article) afin de limiter l'utilisation de la mémoire. Le problème dans la façon dont nous abordons ce problème était que votre onglet perdrait *tout* son état.

Si vous montrez à nouveau de l'intérêt pour l'onglet, nous devions l'actualiser, et toutes vos interactions avec celui-ci seraient perdues. Le sérialiseur d'onglets aborde ce problème d'une manière qui vous permet de revenir presque exactement à ce que vous vouliez sans avoir à revenir au réseau. Nous sommes impatients de partager plus d’informations sur ce travail à une date ultérieure.

Essayez la suppression des onglets et dites-nous ce que vous en pensez

Nous aimerions savoir si cette fonctionnalité vous serait utile et comment nous pourrions l'améliorer. Essayez-la, amusez-vous et donnez-nous votre avis dans les commentaires. :) Nous vous serions également reconnaissants de signaler les bugs que vous rencontrez sur crbug.com.