WebEngine Lifecycle Beispiel
Einfrieren und Verwerfen von Hintergrundregisterkarten, um die CPU- und Speichernutzung zu reduzieren.
WebEngine DasLifecycle-Beispiel zeigt, wie die Eigenschaften lifecycleState und recommendedState von WebEngineView verwendet werden können, um die CPU- und Speichernutzung von Hintergrundregisterkarten in einem Browser mit Registerkarten zu reduzieren.
Einen Überblick über die Lifecycle-Funktion finden Sie unter Page Lifecycle API.
Ausführen des Beispiels
Zum Ausführen des Beispiels von Qt Creatorzu starten, öffnen Sie den Modus Welcome und wählen Sie das Beispiel aus Examples. Weitere Informationen finden Sie unter Erstellen und Ausführen eines Beispiels.
UI-Elemente des Beispiels
Das Beispiel verwendet Qt Quick Controls 2, um einen traditionellen Browser mit Registerkarten im Material Style (dunkle Variante) zu implementieren. Das Hauptanwendungsfenster (WebBrowser.qml
) ist unterteilt in eine Kopfleiste am oberen Rand und einen Hauptanzeigebereich, der den Rest des Fensters ausfüllt. Die Kopfzeile enthält die Registerkartenleiste (WebTabBar.qml
) mit einer Schaltfläche pro Registerkarte (WebTabButton.qml
). Der Hauptbereich besteht aus einer Reihe von Registerkarten (WebTabStack.qml
und WebTab.qml
). Jede Registerkarte hat wiederum eine Symbolleiste am oberen Rand und eine WebEngineView für die Anzeige von Webseiten. Schließlich verfügt das Hauptfenster auch über eine Drawer zum Ändern von Einstellungen. Die Schublade kann durch Klicken auf die Schaltfläche "⋮" in der Symbolleiste geöffnet werden.
Hinweis: Beachten Sie, dass WebTab.qml
fromUserInput verwendet, um unvollständige URLs zu behandeln.
Lebenszyklusstatus im Beispiel
Im Beispiel gibt es zwei Möglichkeiten, den Lebenszyklusstatus zu ändern: manuell und automatisch. Bei der manuellen Methode wird die Eigenschaft lifecycleState direkt verwendet, um den Lebenszyklusstatus der Webansicht zu ändern, während die automatische Methode zeitbasiert ist und auch die recommendedState berücksichtigt.
Die Titel der Registerkarten in der Registerkartenleiste sind farblich kodiert, wobei eingefrorene Registerkarten blau und verworfene rot dargestellt sind.
Manuelle Steuerung des Lebenszyklus
Die manuelle Steuerung erfolgt über Kontextmenüs auf den Schaltflächen der Registerkartenleiste (WebTabButton.qml
). Das Menü enthält drei Optionsschaltflächen, eine für jeden Lebenszyklusstatus, wobei der aktuelle Status markiert ist. Einige Schaltflächen können deaktiviert sein, entweder weil sie unzulässige Zustandsübergänge darstellen (z. B. kann eine Ansicht Discarded
nicht direkt in den Zustand Frozen
übergehen) oder weil andere Vorbedingungen nicht erfüllt sind (z. B. kann sich eine sichtbare Ansicht nur im Zustand Active
befinden).
Automatische Lebenszykluskontrolle
Die automatische Steuerung wird mit einem Timer in der Komponente WebTab
(WebTab.qml
) realisiert. Der Timer wird immer dann gestartet, wenn die lifecycleState der Webansicht nicht mit ihrer recommendedState übereinstimmt. Sobald der Timer ausgelöst wird, wird der Lebenszykluszustand der Ansicht auf den empfohlenen Zustand gesetzt.
Die Zeitverzögerung wird verwendet, um zu verhindern, dass der Lebenszykluszustand zu schnell geändert wird, wenn der Benutzer zwischen Registerkarten wechselt. Die Verzögerungen für das Einfrieren und Verwerfen können in der Einstellungsschublade geändert werden, die über die Schaltfläche "⋮" in der Symbolleiste zugänglich ist.
Dies ist ein recht einfacher Algorithmus für die automatische Steuerung des Lebenszyklus, es könnten jedoch auch anspruchsvollere Algorithmen auf der Grundlage der Eigenschaft lifecycleState konzipiert und implementiert werden. Beispielsweise verwendet der Chromium-Browser experimentell ein vorab trainiertes tiefes neuronales Netz, um die nächste Aktivierungszeit der Registerkarte durch den Benutzer vorherzusagen, wobei die Registerkarten im Wesentlichen danach geordnet werden, wie interessant sie für den Benutzer sind. Die Implementierung eines solchen Algorithmus bleibt vorerst eine Übung für den Leser.
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.