Tabblad weggooien in Chrome: een geheugenbesparend experiment

Addy Osmani
Addy Osmani

Het verkleinen van de geheugenvoetafdruk van Chrome is dit jaar een van de topprioriteiten van het team. We hebben al een vermindering van 45% gezien in het geheugengebruik van Gmail dankzij verbeteringen in het garbagecollection -proces van V8, maar we zijn nog maar net begonnen. Een van onze volgende experimenten met geheugengebruik is gericht op tab-hamsteraars (zoals ikzelf). Het heet Tabblad weggooien .

Niet alle geopende tabbladen zijn gebruikte tabbladen. Als er weinig geheugen beschikbaar is, kan Chrome oninteressante achtergrondtabbladen verwijderen.

Het weggooien van tabbladen is als experiment beschikbaar in Chrome 46 en hoger.

Achtergrond

Voor elk geopend tabblad neemt ons rendererproces gewoonlijk ongeveer 50 MB per tabblad in beslag, ook al gebruiken de meeste mensen slechts één tabblad tegelijk. Als u 10 tabbladen geopend heeft, wordt er minstens 450 MB geheugen besteed om de status van uw tabblad op de achtergrond te behouden. Dit kan na verloop van tijd een beetje onpraktisch worden.

Geheugen vereist per tabblad

Een van onze doelen is het verminderen van het geheugen dat wordt gebruikt op tabbladen die u niet daadwerkelijk gebruikt. Als ik kijk naar welke tabbladen mijn systeemgeheugen in beslag nemen in Chrome Task Manager, 'gebruik' ik eigenlijk slechts een of twee van de onderstaande sites terwijl de andere tabbladen op de achtergrond ongebruikt zijn.

Geheugen vereist taakbeheer

Dat is waar het weggooien van tabbladen ons geheugengebruik kan helpen verminderen.

Ongebruikte tabbladen weggooien

Met het verwijderen van tabbladen kan Chrome automatisch tabbladen verwijderen die niet van groot belang voor u zijn wanneer wordt gedetecteerd dat het systeemgeheugen behoorlijk laag is. Wat bedoelen we met weggooien? Nou, een weggegooid tabblad gaat nergens heen. We doden het, maar het is nog steeds zichtbaar op de Chrome-tabstrook. Als u terug navigeert naar een tabblad dat is verwijderd, wordt het opnieuw geladen wanneer erop wordt geklikt. Formulierinhoud, scrollpositie enzovoort worden op dezelfde manier opgeslagen en hersteld als tijdens voorwaartse/achterwaartse tabbladnavigatie.

We hebben ook nog een nieuwe functie waarmee u alle tabbladbronnen lokaal in de cache kunt opslaan, wat goed werkt als u tabbladen verwijdert wanneer u offline bent. Wanneer het tabblad opnieuw wordt geactiveerd, bieden wij u de keuze om de in de cache opgeslagen versie die eerder via het netwerk was geladen, opnieuw te laden. Om het herladen van pagina's vanuit de cache mogelijk te maken, kunt u een ander experiment uitproberen onder chrome://flags/#show-saved-copy .

U kunt het verwijderen van tabbladen vandaag nog uitproberen door dit in te schakelen via chrome://flags/#enable-tab-discarding en Chrome opnieuw te starten. U kunt bepalen of deze is in- of uitgeschakeld via dezelfde Chrome chrome://flags pagina.

Schakel het tabblad in waarbij screenshot wordt verwijderd.
Schermafbeelding van knop opnieuw starten.

Op een nieuwe pagina met de naam chrome://discards kunt u aangeven welke tabbladen momenteel geopend zijn en we proberen enig inzicht te geven in hoe interessant (wij denken) ze voor u zijn, van meest tot minst.

Schermafbeelding van verwijderde tabbladenpagina.

Om de functie uit te testen, kunt u uw normale surfgedrag uitvoeren totdat uw systeem zich in een modus met weinig geheugen bevindt, of u kunt ook een tabblad verwijderen activeren vanuit about:discards door op 'Tabblad nu verwijderen' te klikken. Hierdoor wordt het laatste tabblad in de lijst verwijderd. U kunt een bepaald tabblad ook uit de lijst verwijderen door op de overeenkomstige knop 'Verwijderen' te klikken. Een weggegooid tabblad wordt weergegeven met het voorvoegsel [Afgedankt].

Voorbeeldscreenshot van verwijderd tabblad.

Tabblad weggooien gooit tabbladen weg in deze volgorde:

  • Interne pagina's zoals een nieuwe tabbladpagina, bladwijzers, enz.
  • Tabbladen die lang geleden zijn geselecteerd
  • Onlangs geselecteerde tabbladen
  • Apps die in een venster worden uitgevoerd
  • Vastgezette tabbladen
  • Het geselecteerde tabblad

We hebben het experiment voor het verwijderen van tabbladen ingeschakeld in Chrome Canary voor Windows en Mac OS. Binnenkort komt er een Linux-implementatie.

Er wordt ook rekening gehouden met vastgezette tabbladen bij de vraag of een tabblad moet worden weggegooid

Inspiratie: Hallo daar, geweldige jarretel

Als het verwijderen van tabbladen bekend klinkt, komt dat omdat u waarschijnlijk nuttige Chrome-extensies bent tegengekomen die u een iets eenvoudigere versie van dit idee geven, zoals The Great Suspender . The Great Suspender heeft tot doel de geheugen- en GPU-voetafdruk van Chrome te verkleinen door tabbladen op te schorten na een aangepaste periode van inactiviteit.

Schermafdruk van de jarretel.

Net als bij het weggooien van tabbladen, kunnen tabbladen worden opgeheven wanneer u er opnieuw mee wilt communiceren. Great Suspender behoudt de titel en het favicon van elk tabblad en toont opgeschorte tabbladen gedimd, zodat u er op elk gewenst moment gemakkelijk naar terug kunt navigeren.

Favicon-screenshot van opgeschorte tabbladen.

Tabbladen op de achtergrond die ik niet actief gebruik, zijn opgeschort, waardoor er geheugen wordt bespaard. Tabbladen die ik nog steeds actief gebruik (GitHub en YouTube) werken echter nog steeds zoals normaal.

We hebben een goed gesprek gehad met de auteur van de Great Suspender-extensie tijdens het ontwikkelen van het verwijderen van tabbladen en ze zijn blij om te zien dat we dit probleem op een natuurlijke manier aanpakken op manieren die efficiënter zijn dan een extensie zou kunnen, zoals het verliezen van de status van uw gebruikersinactiviteit.

Toekomstige verbeteringen: de tab-serializer

De serialisatiefunctie voor tabbladen is een toekomstig werkstuk waarvan we denken dat het tot aanzienlijke verbeteringen kan leiden ten opzichte van onze huidige aanpak van het weggooien van tabbladen. Het neemt de inhoud van een Chrome-tabblad en serialiseert de *huidige* status ervan in een binaire blob. Deze binaire blob kan later worden gedeserialiseerd tot een tabblad.

De serializer zou bijna alles serialiseren wat Chrome, Blink en V8 nodig hebben om een ​​tabblad correct te behouden (iets wat Chrome-extensies die dit probleem aanpakken historisch gezien niet gemakkelijk hebben kunnen bereiken). Serialisatie zou de gebruikelijke verdachten omvatten: de DOM (met veel WebGL en Canvas inbegrepen), CSS en de staat van de V8 JavaScript VM.

Screenshot van het serialisatieconcept

Als je Android of ChromeOS gebruikt, weet je misschien dat (vergelijkbaar met het experiment voor het verwijderen van tabbladen dat in dit bericht wordt behandeld) we achtergrondtabbladen op agressieve wijze doden om ervoor te zorgen dat het geheugengebruik laag is. Het probleem met de manier waarop we dit aanpakken, was dat uw tabblad *de hele* status ervan zou verliezen.

Wanneer u opnieuw interesse toonde in het tabblad, zouden we het opnieuw moeten laden en zou al uw interactie ermee verloren gaan. De tab-serializer benadert dit probleem op een manier die u vrijwel precies terugbrengt naar wat u was, zonder dat u terug hoeft te gaan naar het netwerk. We kijken ernaar uit om op een later tijdstip meer informatie over deze werkzaamheden te delen.

Probeer het weggooien van tabbladen uit en laat ons weten wat u ervan vindt

We willen graag weten of deze functie nuttig voor u is en hoe deze kan worden verbeterd. Probeer het uit, speel ermee (vooral als je een tab-hoarder bent!) En laat ons weten wat je ervan vindt in de reacties. :) We zouden het ook op prijs stellen als u tickets indient voor eventuele bugs die u tegenkomt op crbug.com .