Tab-Verwerfen in Chrome – Ein Experiment zum Arbeitsspeichersparen

Die Verringerung des Arbeitsspeicherbedarfs von Chrome ist eine der wichtigsten Prioritäten des Teams in diesem Jahr. Dank der Verbesserungen bei der Garbage Collection von V8 konnten wir die Arbeitsspeichernutzung von Gmail bereits um bis zu 45% reduzieren. Aber das ist erst der Anfang. Einer unserer nächsten Tests zur Speichernutzung richtet sich an Tab-Sammler wie mich. Diese Funktion heißt Tab discarding (Tab-Verwerfen).

Nicht alle geöffneten Tabs sind verwendete Tabs. Wenn der Arbeitsspeicher knapp wird, kann Chrome nicht interessante Hintergrund-Tabs schließen.

Das Schließen von Tabs ist in Chrome 46 und höher als Test verfügbar.

Hintergrund

Für jeden geöffneten Tab benötigt unser Rendering-Prozess in der Regel etwa 50 MB pro Tab, auch wenn die meisten Nutzer nur einen einzigen Tab gleichzeitig verwenden. Wenn Sie 10 Tabs geöffnet haben, werden mindestens 450 MB Arbeitsspeicher nur dafür benötigt, den Status der Tabs im Hintergrund aufrechtzuerhalten. Das kann mit der Zeit etwas unübersichtlich werden.

Erforderlicher Arbeitsspeicher pro Tab

Eines unserer Ziele besteht darin, den Arbeitsspeicherverbrauch für Tabs zu reduzieren, die Sie nicht aktiv verwenden. Wenn ich im Chrome-Task-Manager sehe, welche Tabs meinen Systemspeicher belegen, benutze ich nur eine oder zwei der unten aufgeführten Websites, während die anderen Tabs im Hintergrund nicht verwendet werden.

Task-Manager für Arbeitsspeicher erforderlich

Hier kann das Löschen von Tabs dazu beitragen, die Arbeitsspeichernutzung zu reduzieren.

Nicht verwendete Tabs verwerfen

Wenn die Tab-Schließung aktiviert ist, kann Chrome Tabs automatisch schließen, die für Sie nicht so wichtig sind, wenn der Systemspeicher knapp wird. Was bedeutet „Verwerfen“? Ein verworfener Tab wird nicht gelöscht. Wir deaktivieren sie, sie ist aber weiterhin in der Chrome-Tableiste sichtbar. Wenn Sie zu einem verworfenen Tab zurückkehren, wird er beim Klicken aktualisiert. Formularinhalte, Scrollposition usw. werden auf die gleiche Weise gespeichert und wiederhergestellt wie bei der Navigation zwischen den Tabs.

Außerdem gibt es eine weitere neue Funktion, mit der alle Tabressourcen lokal im Cache gespeichert werden können. Das funktioniert gut mit dem Löschen von Tabs, wenn Sie offline sind. Wenn der Tab reaktiviert wird, können Sie die im Cache gespeicherte Version, die zuvor über das Netzwerk geladen wurde, neu laden. Wenn Sie das Laden der Seite aus dem Cache aktivieren möchten, können Sie unter chrome://flags/#show-saved-copy einen weiteren Test ausprobieren.

Sie können die Funktion bereits jetzt testen. Aktivieren Sie sie dazu über chrome://flags/#enable-tab-discarding und starten Sie Chrome neu. Sie können auf derselben Chrome-Seite chrome://flags festlegen, ob die Funktion aktiviert oder deaktiviert ist.

Screenshot für das Schließen von Tabs aktivieren
Screenshot der Schaltfläche „Neu starten“

Auf der neuen Seite chrome://discards können Sie die aktuell geöffneten Tabs auflisten. Außerdem sehen Sie, wie interessant wir sie für Sie halten, sortiert nach „am meisten“ und „am wenigsten“.

Screenshot der Seite „Verworfene Tabs“

Wenn Sie die Funktion testen möchten, können Sie entweder wie gewohnt im Internet surfen, bis Ihr System in den Low-Memory-Modus wechselt, oder Sie können über about:discards einen Tab-Verwurf auslösen, indem Sie auf „Tab jetzt verwerfen“ klicken. Dadurch wird der letzte Tab in der Liste verworfen. Sie können einen bestimmten Tab auch aus der Liste entfernen, indem Sie auf die entsprechende Schaltfläche „Verwerfen“ klicken. Ein verworfener Tab wird mit dem Präfix [Verworfen] angezeigt.

Beispiel für einen Screenshot des Tabs „Verworfen“

Beim Verwerfen von Tabs werden die Tabs in dieser Reihenfolge verworfen:

  • Interne Seiten wie die Seite „Neuer Tab“ und Lesezeichen
  • Vor langer Zeit ausgewählte Tabs
  • Kürzlich ausgewählte Tabs
  • In einem Fenster ausgeführte Apps
  • Angepinnte Tabs
  • Der ausgewählte Tab

Wir haben den Tab-Verschwendungstest in Chrome Canary für Windows und macOS aktiviert. Eine Linux-Implementierung ist bald verfügbar.

Angepinnte Tabs werden ebenfalls berücksichtigt, wenn entschieden wird, ob ein Tab geschlossen werden soll.

Inspiration: hey there, great suspender

Wenn Ihnen das Entfernen von Tabs bekannt vorkommt, haben Sie wahrscheinlich schon einmal nützliche Chrome-Erweiterungen wie The Great Suspender verwendet, die eine etwas einfachere Version dieser Funktion bieten. The Great Suspender soll den Arbeitsspeicher- und GPU-Footprint von Chrome reduzieren, indem Tabs nach einer benutzerdefinierten Inaktivitätsdauer angehalten werden.

Screenshot des Suspenders

Ähnlich wie bei der Deaktivierung von Tabs können Tabs auch wieder aktiviert werden, wenn Sie sie wieder verwenden möchten. Great Suspender speichert den Titel und das Favicon jedes Tabs und blendet die ausgelagerten Tabs aus. So können Sie jederzeit ganz einfach zu ihnen zurückkehren.

Screenshot des Favicons für gesperrte Tabs

Tabs im Hintergrund, die ich nicht aktiv verwende, wurden angehalten, um Arbeitsspeicher zu sparen. Tabs, die ich noch aktiv verwende (GitHub und YouTube), funktionieren jedoch wie gewohnt.

Wir haben uns während der Entwicklung der Tab-Schließfunktion mit dem Autor der Great Suspender-Erweiterung unterhalten. Er freut sich, dass wir dieses Problem auf native Weise angehen, was effizienter ist als eine Erweiterung. So geht beispielsweise der Status der Inaktivität der Nutzer nicht verloren.

Zukünftige Verbesserungen: Tab-Serialisierer

Die Tab-Serlierung ist ein zukünftiges Projekt, das unserer Meinung nach zu erheblichen Verbesserungen bei unserem aktuellen Ansatz zum Entfernen von Tabs führen kann. Er nimmt den Inhalt eines Chrome-Tabs und serialisiert seinen *aktuellen* Status in einen binären Blob. Dieses binäre Blob kann später in einen Tab deserialisiert werden.

Der Serializer serialisiert fast alles, was Chrome, Blink und V8 zum ordnungsgemäßen Speichern eines Tabs benötigen. Das war für Chrome-Erweiterungen, die dieses Problem angehen, bisher nicht einfach zu erreichen. Die typischen Kandidaten für die Serialisierung sind das DOM (mit viel WebGL und Canvas), CSS und der Status der V8-JavaScript-VM.

Screenshot des Serializer-Konzepts

Wenn Sie Android oder ChromeOS verwenden, wissen Sie vielleicht, dass wir Hintergrund-Tabs ähnlich wie beim Test zum Schließen von Tabs aggressiv beenden, um die Speichernutzung niedrig zu halten. Das Problem bei unserer bisherigen Lösung war, dass der Tab *alle* seinen Status verlor.

Wenn Sie sich später wieder für den Tab interessieren, müssten wir ihn neu laden und alle Interaktionen mit ihm würden verloren gehen. Der Tab-Serializer geht dieses Problem so an, dass Sie fast genau dort weitermachen können, wo Sie aufgehört haben, ohne zum Netzwerk zurückkehren zu müssen. Wir werden zu einem späteren Zeitpunkt weitere Informationen zu dieser Arbeit veröffentlichen.

Tab-Schließen testen und uns Feedback geben

Wir würden gern wissen, ob diese Funktion für Sie nützlich ist und wie sie verbessert werden könnte. Probieren Sie es aus und lassen Sie uns in den Kommentaren wissen, was Sie davon halten. :) Wir würden uns auch sehr darüber freuen, wenn Sie bei crbug.com Tickets für alle Fehler erstellen, die Sie finden.