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

Addy Osmani
Addy Osmani

Réduire l'espace mémoire utilisé par Chrome est l'une des principales priorités de l'équipe cette année. Nous avons déjà constaté une réduction allant jusqu'à 45% de l'utilisation de la mémoire par 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 dans l'utilisation de la mémoire s'adresse aux accumulateurs d'onglets (comme moi). Il s'agit de la suppression d'onglets.

Tous les onglets ouverts ne sont pas utilisés. Si la mémoire est insuffisante, Chrome peut supprimer les onglets en arrière-plan inintéressants.

La suppression des onglets est disponible à titre expérimental dans Chrome 46 et versions ultérieures.

Contexte

Chaque onglet ouvert, notre processus de moteur 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 vos onglets en arrière-plan. Au fil du temps, cela peut devenir un peu difficile à manier.

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 je consulte les onglets qui consomment de la 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 ne sont pas utilisés.

Gestionnaire de tâches de mémoire requise

C'est là que la suppression des onglets peut aider à réduire l'utilisation de la mémoire.

Suppression des onglets inutilisés...

La suppression des onglets permet à Chrome de supprimer automatiquement les onglets qui ne vous intéressent pas vraiment lorsqu'il est détecté que la mémoire système est assez faible. Qu'entendons-nous par "supprimer" ? Eh bien, un onglet supprimé ne disparaît pas. Elle est fermée, mais elle est toujours visible dans la barre d'onglets Chrome. Si vous revenez à un onglet qui a été supprimé, vous devez cliquer dessus pour actualiser l'onglet. 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 par onglet avant/arrière.

Nous proposons également une autre fonctionnalité qui permet de mettre en cache toutes les ressources d'onglet localement, ce qui fonctionne très bien avec la suppression d'onglets lorsque vous êtes hors connexion. Lorsque l'onglet est réactivé, vous avez la possibilité d'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 des onglets dès aujourd'hui en l'activant via chrome://flags/#enable-tab-discarding et en relançant Chrome. Vous pouvez choisir de l'activer ou de le désactiver depuis la même page chrome://flags de Chrome.

Activer la capture d'écran de la suppression de l'onglet
Capture d'écran du bouton "Relancer".

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

Capture d'écran de la page "Onglets supprimés"

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

Capture d'écran de l'exemple d'onglet supprimé.

La suppression des onglets permet de supprimer les onglets dans cet ordre:

  • Les 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 s'exécutant dans une fenêtre
  • Onglets épinglés
  • Onglet sélectionné

Nous avons activé l'expérience de suppression des onglets dans Chrome Canary pour Windows et macOS, et une implémentation Linux sera bientôt disponible.

Les onglets épinglés sont également pris en compte lorsqu'il s'agit de supprimer un onglet

Inspiration: salut, la salopette

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

Capture d'écran de suspension.

Comme pour la suppression d'onglets, vous pouvez réactiver des onglets lorsque vous devez interagir à nouveau dessus. Great Suspender conserve le titre et le favicon de chaque onglet. Les onglets suspendus sont alors grisés, ce qui vous permet d'y revenir facilement à tout moment.

Capture d'écran du 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. Les onglets que j'utilise toujours activement (GitHub et YouTube) continuent néanmoins de s'exécuter normalement.

Nous avons eu une excellente discussion avec l'auteur de l'extension Great Suspender lors du développement de la suppression d'onglets. Il est heureux de voir que nous abordons ce problème de manière native plus efficacement qu'une extension, comme la perte de l'état de vos omissions des utilisateurs.

Améliorations futures: sérialiseur d'onglets

Le sérialiseur d'onglets fait partie des tâches futures qui, selon nous, pourraient apporter des améliorations significatives à notre approche actuelle de 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érialise presque tout ce que Chrome, Blink et V8 ont besoin de préserver correctement un onglet (un problème historique des extensions Chrome traitant ce problème n'a pas pu être facilement résolu). La sérialisation inclurait les éléments suspects habituels: le DOM (avec de nombreux éléments WebGL et Canvas), CSS et l'état de la VM JavaScript V8.

Capture d'écran du concept Serializer

Si vous utilisez Android ou ChromeOS, vous savez peut-être que (comme pour le test de suppression d'onglets abordé dans cet article), nous analysons agressivement les onglets en arrière-plan afin de limiter l'utilisation de la mémoire. Le problème avec la façon dont nous gérons cela était que votre onglet perdrait *tous* son état.

Lorsque vous avez de nouveau montré de l'intérêt pour l'onglet, nous devons l'actualiser. Toutes vos interactions avec cet onglet sont alors perdues. Le sérialiseur d'onglets aborde simplement ce problème d'une manière qui vous ramène presque exactement à ce que vous étiez en train de faire, sans avoir à revenir sur le réseau. Nous sommes impatients de partager plus d'informations sur ce travail à une date ultérieure.

Essayez la suppression d'onglets et donnez-nous votre avis

Nous aimerions savoir si cette fonctionnalité vous est utile et comment nous pourrions l'améliorer. Essayez-la, testez-la (surtout si vous êtes collectionneur d'onglets) et donnez-nous votre avis dans les commentaires. :) Nous vous serions également reconnaissants de nous envoyer des demandes d'assistance pour tout bug que vous rencontrez sur crbug.com.