Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Verwenden Sie die folgenden Methoden, um die Startzeit, den Arbeitsspeicher, die CPU- und Netzwerknutzung von WebView2 zu optimieren. Verwenden Sie diese Tools und Workflows für die Problembehandlung bei der Leistung.
Das Einbetten von Microsoft Edge WebView2 in Windows-Apps ermöglicht moderne Webfeatures. WebView2 verwendet die Multiprozessarchitektur von Edge, sodass jedes Steuerelement mehrere Browser-Engine-Prozesse startet, die Arbeitsspeicher und Startaufwand erhöhen.
Ausführlicher Inhalt:
- Identifizieren des Typs des Leistungsengpasses
- Verwenden der Evergreen Runtime
- Optimieren der Startleistung
- Speicherauslastung und Prozessverwaltung
- CPU- und Renderingleistung
- Netzwerk- und Ladeleistung
- Kommunikation zwischen dem WebView2-Steuerelement und der Host-App
- Telemetrie- und Profilerstellungstools
- Behandeln von Workflows für Leistungsprobleme
- Siehe auch
Identifizieren des Typs des Leistungsengpasses
Beobachten Sie die Symptome der langsamen Leistung, um zu ermitteln, ob das Problem:
Startverzögerung. Weitere Informationen finden Sie weiter unten unter Optimieren der Startleistung.
Hohe Arbeitsspeicherauslastung. Weitere Informationen finden Sie weiter unten unter Speicherauslastung und Prozessverwaltung.
Anhaltende CPU-Auslastung. Weitere Informationen finden Sie unten unter CPU- und Renderingleistung.
Langsames Laden der Seite. Weitere Informationen finden Sie weiter unten unter Netzwerk- und Ladeleistung.
Verwenden der Evergreen Runtime
Stellen Sie Ihre App nach Möglichkeit mit der Evergreen WebView2 Runtime bereit. Die Evergreen Runtime wird automatisch aktualisiert, um die neuesten Leistungsverbesserungen und Sicherheitskorrekturen zu erhalten. Halten Sie die WebView2 Runtime evergreen (d. h. aktualisiert), um Ihre App zukunftssicher zu machen. Die Verwendung einer festen Version riskiert, dass aktuelle Optimierungen fehlen.
Wenn Sie eine feste Runtime aus Offline- oder Kompatibilitätsgründen verwenden müssen, aktualisieren Sie sie nach dem Testen neuer Builds regelmäßig.
Testen Sie Ihre App mithilfe der neuesten WebView2-Vorschaukanäle (Beta, Dev oder Canary), um sich auf bevorstehende Änderungen vorzubereiten. Viele frühere Leistungsprobleme, z. B. Speicherverluste und hohe CPU-Auslastung, wurden in neueren Versionen der WebView2-Runtime behoben.
Wenn die Versionen von Microsoft Edge und WebView2 übereinstimmen und Microsoft Edge ausgeführt wird, befinden sich die erforderlichen WebView2-Binärdateien bereits im Arbeitsspeicher, wodurch die Startleistung verbessert wird.
Siehe auch:
- Der Evergreen Runtime-Verteilungsmodus in Verteilen Ihrer App und webView2 Runtime.
Optimieren der Startleistung
Kaltstart (Kaltstart)
Ein häufiger Leistungsengpass ist die Zeit, ein WebView2-Steuerelement zu erstellen und zum ersten Mal zu einer Webseite zu navigieren. Bei einem Kaltstart muss WebView2 seine Prozesse und Datenträgercaches einrichten, was zu einer spürbaren Verzögerung führen kann (die je nach Hardware- und Inhaltskomplexität variieren kann).
Verwenden Sie die folgenden bewährten Methoden, um den Start zu optimieren.
Verwenden Sie WebView2 nicht für die erste Benutzeroberfläche.
Verwenden Sie einfache XAML- oder Win32-Bildschirme anstelle von WebView2, um Begrüßungsbildschirme oder einfache Dialogfelder zu rendern.
Vermeiden Sie das Rendern von Begrüßungsbildschirmen oder einfachen Dialogen mit WebView2 aufgrund von Startkosten und Ressourcenkonflikten. Initialisieren Sie WebView2 nur beim Anzeigen des tatsächlichen Webinhalts.
Siehe auch:
Optimieren des Speicherorts für Benutzerdatenordner (User Data Folder, UDF)
Behalten Sie die UDF aus Leistungsgründen im lokalen Standarddatenordner der App bei. Weitere Informationen finden Sie unter Verwalten von Benutzerdatenordnern.
Vermeiden Sie langsame Laufwerke oder Netzwerkfreigaben. Legen Sie die Daten auf einem schnelleren, physischen Datenträger ab.
Vermeiden redundanter WebView2-Instanzen
Planen Sie Ihre Benutzeroberfläche so, dass Sie nicht mehr WebView2-Steuerelemente als erforderlich erstellen.
Wenn Sie beispielsweise zwischen mehreren Webseiten navigieren, kann es schneller sein, eine einzelne WebView2 wiederzuverwenden und einfach zu einer neuen URL zu navigieren, anstatt ein WebView2-Steuerelement zu zerstören und neu zu erstellen.
Siehe auch:
Speicherauslastung und Prozessverwaltung
Jedes WebView2-Steuerelement erstellt einen eigenen Satz von Prozessen, z. B. Browser, Renderer und GPU. Die Ressourcennutzung nimmt im Allgemeinen zu, wenn mehr WebView2-Instanzen erstellt werden, wobei jede instance einen eigenen Satz von Browserprozessen ausführt.
Ein WebView2-instance verwendet Arbeitsspeicher basierend auf der Komplexität des Webinhalts und der Browserprozesse, die er erstellt. Das Ausführen vieler Instanzen des WebView2-Steuerelements kann den Systemspeicher belasten.
Im Folgenden finden Sie bewährte Methoden zum Verwalten und Reduzieren des Speicherbedarfs.
Freigeben von WebView2-Umgebungen
Um Arbeitsspeicher zu sparen, verwenden Sie eines
CoreWebView2Environmentfür alle WebView2-Steuerelemente in einer App, um konsistente Parameter für die Freigabe zu gewährleisten.Verwenden Sie dieselbe Umgebung in Schnittstellen im Registerkartenformat wieder, anstatt mehrere Umgebungen zu erstellen.
Siehe auch:
Verwenden der Prozessfreigabe auf App-Ebene
Verwenden Sie nach Möglichkeit die Prozessfreigabe auf App-Ebene.
Mehrere Apps können einen Browserprozess gemeinsam nutzen, indem sie den identischen Benutzerdatenordner und verwenden
CoreWebView2EnvironmentOptions. Dies reduziert die Speicherauslastung, erfordert jedoch eine sorgfältige Verwaltung von Profilen und gründliche Tests aufgrund möglicher App-übergreifender Störungen.Beachten Sie, dass beim Freigeben eines Benutzerdatenordners (User Data Folder, UDF) zugrunde liegende Daten (z. B. Cookies, Caches und Datenbanken) von verschiedenen Anwendungen gemeinsam genutzt werden.
Siehe auch:
Vermeiden von Hostobjekten mit großem Umfang
Wenn Sie verwenden AddHostObjectToScript , um .NET-Objekte im Web verfügbar zu machen, achten Sie darauf, was diese Objekte im Arbeitsspeicher enthalten. Auf das gesamte Objekt wird effektiv verwiesen, solange der Skriptkontext weiterhin aktiv ist, was die Garbage Collection dieses Objekts auf der .NET-Seite verhindern könnte.
Machen Sie kein sehr großes Objektdiagramm verfügbar, wenn nur ein kleiner Teil für die Skripterstellung benötigt wird. Bevorzugen Sie die Erstellung schmaler, zweckspezifischer Hostobjekte, anstatt vollständige Anwendungsmodelle zu übergeben. Zum Beispiel:
Machen Sie nur die Vorgänge und Daten verfügbar, die die Seite tatsächlich benötigt. Machen Sie beispielsweise ein
FileService-Objekt anstelle des gesamtenAppContextverfügbar.Umschließen Sie komplexe Objekte hinter kleinen Fassaden, um unbeabsichtigt tiefe Objekthierarchien zu vermeiden.
Stellen Sie für Sammlungen gefilterte oder ausgelagerte Ergebnisse bereit, anstatt die vollständige Datenstruktur verfügbar zu machen.
Wenn die Seite, die das Objekt benötigt hat, nicht mehr vorhanden ist, rufen Sie auf CoreWebView2.RemoveHostObjectFromScript , um das Objektdiagramm freizugeben. Wenn Sie beispielsweise von einer Seite weg navigieren, die ein Hostobjekt verwendet hat, entfernen Sie dieses Objekt, um zu vermeiden, dass es im Hintergrund aktiv bleibt.
Siehe auch:
- Host-/Webobjektfreigabe in Übersicht über WebView2-APIs.
Verhindern von Speicherverlusten
Entfernen Sie systemeigene Ereignishandler vor dem Löschen von WebView2-Objekten, um Verweiszyklen und Verluste zu vermeiden.
Vermeiden Sie Schließungen, die stark auf WebView2 verweisen. verwenden Sie bei Bedarf schwache Verweise.
Rufen Sie
WebView2.Dispose()auf, um WebView2-Objekte freizugeben, wenn sie nicht mehr benötigt werden.
Siehe auch:
- WebView2.Dispose(Boolean) Method – WPF.
- WebView2.Dispose(Boolean) Method – WinForms.
- Beheben von Speicherproblemen
Verwenden von Speicherverwaltungs-APIs
Legen Sie
MemoryUsageTargetLevel = CoreWebView2MemoryUsageTargetLevel.Lowfür inaktive WebViews fest, um die Speicherauslastung zu reduzieren. Dadurch kann die Browser-Engine aufgefordert werden, zwischengespeicherte Daten zu löschen oder den Arbeitsspeicher auf den Datenträger zu tauschen. Wenn die WebView2-instance wieder aktiv ist, stellen Sie die Zielebene auf wieder her, um die volle Leistung zuNormalerzielen. Weitere Informationen finden Sie unter Speicherauslastungsziel in Der Übersicht über WebView2-APIs.Wenn die WebView2-instance für eine Weile nicht verwendet wird, rufen Sie auf
CoreWebView2.TrySuspendAsync(), um den Rendererprozess anzuhalten. Dadurch werden Skripts angehalten und die Ressourcennutzung weiter verringert. Setzen Sie bei Bedarf mitResume()fort. Bei diesenTryVorgängen handelt es sich um bestmögliche Leistung. Weitere Informationen finden Sie unter Leistung und Debuggen unter Übersicht über WebView2-APIs.
Optimieren von Webinhalten
- Optimieren Sie den gerenderten Webinhalt. Beobachten Sie, ob im JavaScript-Heap übermäßiger Arbeitsspeicher verwendet wird. Verwenden Sie Microsoft Edge DevTools, z. B. das Speichertool , um die Nutzung von Speicherressourcen durch verschiedene Webinhalte zu überwachen. Weitere Informationen finden Sie unter Aufzeichnen von Heapmomentaufnahmen mit dem Speichertool ("Profilerstellungstyp Heap Momentaufnahme").
Regelmäßiges Aktualisieren von WebView2
Aktualisieren Sie die WebView2-instance in regelmäßigen Abständen. In Szenarien, in denen der Seitenlebenszyklus natürlich den Zustand anhäuft, z. B. bei einer webseite mit langer Ausführungsdauer, hilft das Aktualisieren der WebView2-instance, den WebView2-Prozess auf eine sauber Baseline zurückzugeben.
Einige Seiten mit langer Ausführungsdauer behalten je nach Webinhalt und Anwendungsentwurf möglicherweise Ressourcen im Laufe der Zeit bei. Wenn die Speicherauslastung unerwartet zunimmt, überprüfen Sie Folgendes mithilfe von DevTools:
JavaScript-Heapverwendung. Siehe:
Ereignislistener. Siehe:
- Analysieren Sie den Mangel an Tastaturunterstützung mithilfe der Registerkarte Ereignislistener unter Analysieren der Tastaturunterstützung in Formularen, über die Registerkarte Ereignislistener im Tool Elemente .
- Wählen Sie leistungsmetriken aus, die unter Messen der Laufzeitleistung einer Seite mit dem Leistungsmonitortool über die Metrik JS-Ereignislistener überwacht werden sollen.
DOM-Aufbewahrung. Siehe:
CPU- und Renderingleistung
WebView2 überlädt das Rendern von Webinhalten auf die Von Edge verwendete Browser-Engine, sodass die Leistungsmerkmale dem Ausführen einer Website in Edge ähneln.
Die folgenden Methoden stellen eine effiziente CPU-Auslastung und ein reibungsloses Rendering sicher.
Aktivieren der Hardwarebeschleunigung
Deaktivieren Sie die Verwendung der GPU durch WebView2 nicht zum Rendern (über das
disable-gpuFlag), außer wenn Sie die Problembehandlung durchführen.Standardmäßig verwendet WebView2 die GPU zum Rendern. Die Verwendung der GPU durch WebView2 ist entscheidend für die Leistung. GPU-Treiber und zusätzliche Puffer müssen zugeordnet werden, was zusätzlichen Arbeitsspeicher erfordert.
Siehe auch
-
WebView2-Browserflags -
disable-gpu
Optimieren von Webinhalten
Optimieren Sie Seiten mithilfe der folgenden Techniken:
Einschränken von javascript-intensiven Daten.
Debounce oder Drosselung von Aufgaben.
Verwenden Sie CSS (anstelle von JavaScript) für Animationen.
Teilen Sie lange Skripts auf, um die Reaktionsfähigkeit der Benutzeroberfläche zu erhalten.
Verwenden Sie Microsoft Edge DevTools, um Engpässe zu identifizieren.
Verwenden Sie die typische Weboptimierung: Vermeiden Sie übermäßige Layout-Thrashings, bei denen ein Skript zwischen Lesen und Schreiben von DOM-Eigenschaften wechselt, was zu mehreren Reflows führt.
Siehe auch:
- Leistungstool: Analysieren der Leistung Ihrer Website
- Analysieren der Laufzeitleistung (Tutorial)
- Behandeln von häufigen Leistungsproblemen
- Optimieren der Websitegeschwindigkeit mit Lighthouse
Reduzieren unnötiger Kommunikation
Reduzieren Sie unnötige Kommunikation zwischen der Hostanwendung und Webinhalten, die in WebView2 gehostet werden. Dadurch wird eine übermäßige prozessübergreifende Kommunikation sowie der damit verbundene Mehraufwand vermieden. Weitere Informationen finden Sie unter Interop von nativem und Webcode.
Batchnachrichten, wo immer möglich, da häufige Nachrichtenübergaben die CPU-Auslastung erhöhen können.
Verwalten der Prozesspriorität
- Wenn die App über eine hohe native Workload verfügt, weisen Sie Threadprioritäten sorgfältig zu, um zu vermeiden, dass WebView2-Threads ausgehungern. WebView2 erstellt separate Rendererprozesse.
Siehe auch:
Testen realer Szenarien
- Testen Sie Ihre tatsächlichen Inhalte auf Der Zielhardware mithilfe von Microsoft Edge DevTools, um Leistungsprobleme zu finden und zu optimieren.
Siehe auch:
Netzwerk- und Ladeleistung
Netzwerklatenz und eingeschränkte Bandbreite können vom Benutzer wahrgenommene Leistungsprobleme verursachen, insbesondere beim Laden von Webinhalten in einem WebView2-Steuerelement.
Die folgenden bewährten Methoden überschneiden sich mit der allgemeinen Webentwicklung.
Verwenden von Zwischenspeicherung und Service Workern
WebView2 unterstützt die Browserzwischenspeicherung.
Verwenden Sie Zwischenspeicherung und Service Worker.
Stellen Sie die richtigen Cacheheader bereit, sodass wiederholte Ressourcenanforderungen zwischengespeicherte Versionen verwenden.
Erwägen Sie die Vorabzwischenspeicherung statischer Dateien mithilfe eines Service Workers für den Offlinezugriff. überwachen Sie jedoch die Cachegröße.
Siehe auch:
- HTTP-Zwischenspeicherung bei MDN.
- Anzeigen von Cachedaten
- Verwenden von Service Workern bei MDN.
Überprüfen von Netzwerkengpässen
Verwenden Sie das DevTools Network-Tool , um langsame Ressourcen in WebView2 zu identifizieren. Weitere Informationen finden Sie unter Untersuchen der Netzwerkaktivität.
Optimieren oder laden Sie langsame Skripts oder APIs von Drittanbietern nach Bedarf.
Reduzieren der anfänglichen Nutzlasten
So verbessern Sie die wahrgenommene Geschwindigkeit:
Halten Sie die anfängliche Nutzlast leicht. Bevorzugen Sie das anfängliche Senden von statischem HTML, da es in der Regel schneller als JavaScript lädt, analysiert und gerendert wird. Seien Sie vorsichtig bei der anfänglichen Verwendung von JavaScript zusammen mit einem Single-Page-App-Framework. Ein solches Framework lädt in der Regel viel Code beim Start, was das anfängliche Rendern des Webinhalts verzögern kann.
HTML lädt, analysiert und rendert sehr schnell – schneller als die Zeit, die JavaScript benötigt hätte, um die gleiche Benutzeroberfläche zu erzeugen. Bei einigen Single-Page-App-JS-Frameworks muss der gesamte Frameworkcode heruntergeladen, analysiert und ausgeführt werden, selbst wenn der anfängliche HTML-Code des Frameworks klein ist, bevor etwas angezeigt werden kann.
Zurückstellen von schweren Komponenten.
Verzögertes Laden von Bildern oder Skripts, nachdem die anfängliche Benutzeroberfläche angezeigt wird.
Siehe auch:
- Beseitigen Sie Render-blockierende Ressourcen in Optimieren der Websitegeschwindigkeit mithilfe von Lighthouse.
Kommunikation zwischen dem WebView2-Steuerelement und der Host-App
Auswählen des richtigen Kommunikationskanals
WebView2 bietet verschiedene Web-to-Host- und Host-to-Web-Kommunikationsoptionen.
Versuchen Sie, Webnachrichten anstelle von Hostobjekten zu verwenden. Webnachrichten sind aufgrund der Einfachheit und Zuverlässigkeit von Webnachrichten in der Regel schneller als Hostobjekte.
Verwenden Sie Hostobjekte nur, wenn Sie Funktionen benötigen, die webnachrichten nicht einfach ausdrücken können, z. B.:
Umfangreiche, objektähnliche APIs (Methoden, Eigenschaften, Ereignisse), die Sie direkt für JavaScript verfügbar machen möchten.
Zustandsbehaftete Interaktionen, bei denen die Aufrechterhaltung des hostseitigen Kontexts einfacher ist, als strukturierte Nachrichten hin und her zu übergeben.
Große oder binäre Datenflüsse, bei denen wiederholte Zeichenfolgenserialisierung von Nutzdaten in Webnachrichten ineffizient wird.
Hostobjekte haben die folgenden Nachteile:
Hostobjekte erfordern COM-Marshalling, was zu Instabilität führen kann, wenn sich das Objektdiagramm ändert oder nicht ordnungsgemäß gemarshallt wird.
Hostobjekte sind im Allgemeinen langsamer für chatzige, häufige Aufrufe
WebMessageim Vergleich zu einem einzelnen Batch, da jeder Methoden- oder Eigenschaftszugriff die Grenze einzeln überschreitet.Hostobjekte sorgen für eine engere Kopplung zwischen Web- und Hostcode und verringern so die Portabilität.
Siehe auch:
Optimieren der Kommunikation
Implementieren Sie asynchrone Batchkommunikation, um die IPC-Kommunikation zu minimieren und das Kopieren von Daten zu reduzieren.
Siehe auch:
- Web-/native Interop in Übersicht über WebView2-APIs.
- Interop von nativem und Webcode
Telemetrie- und Profilerstellungstools
Das Sammeln von Daten ist der Schlüssel zum Identifizieren und Beheben von Leistungsproblemen.
Im Folgenden finden Sie Tools und Telemetrietechniken für WebView2.
WebView2 ETW-Ablaufverfolgung
Verwenden Sie das WebView2.wprp Profil von Microsoft (Sammeln einer ETW-Ablaufverfolgung) mit Windows Performance Recorder, um detaillierte WebView2-Ereignisse wie Prozessstarts und Navigationszeitangaben zu erfassen und zu analysieren.
Sie können Edge-/WebView2-Anbieterereignisse aufzeichnen, indem Sie die Ereignisablaufverfolgung für Windows (ETW) verwenden. Weitere Informationen finden Sie unter Sammeln einer ETW-Ablaufverfolgung.
Analysieren Sie Ablaufverfolgungen in Windows Leistungsanalyse für CPU-, Datenträger- und Arbeitsspeicherdaten.
Microsoft Edge DevTools
Verwenden Sie Microsoft Edge DevTools, um WebView2-Inhalte und -Prozesse zu überwachen, um Probleme wie hohe CPU- oder Arbeitsspeicherverluste zu identifizieren.
Klicken Sie mit der rechten Maustaste auf ein WebView2-Steuerelement in einer WebView2-App, und wählen Sie dann Untersuchen aus. Klicken Sie beispielsweise mit der rechten Maustaste auf die Haupt-Win32-Beispiel-App, und klicken Sie dann auf Untersuchen. DevTools wird in einem nicht angedockten, dedizierten Browserfenster geöffnet.
In DevTools können Sie Tools wie das Speichertool und das Leistungstool verwenden:
Siehe auch:
- Debuggen von WebView2-Apps mit Microsoft Edge DevTools
- Leistungstool: Analysieren der Leistung Ihrer Website
- Beheben von Speicherproblemen : Das Speichertool .
Untersuchen mit Edge-Entwicklertools
Verwenden Sie edge://inspect, wodurch die Registerkarte Mit Edge-Entwicklertools untersuchen geöffnet wird, um WebView2-Inhalte und -Prozesse zu überwachen, um Probleme wie hohe CPU- oder Arbeitsspeicherverluste zu identifizieren:
Weitere Informationen zum Untersuchen eines WebView2-Prozesses mithilfe edge://inspectvon finden Sie unter Remotedebuggen von WebView2 WinUI 2-Apps (UWP).
Browsertask-Manager
Verwenden Sie den Browsertask-Manager, um WebView2-Inhalte und -Prozesse zu überwachen, um Probleme wie hohe CPU- oder Arbeitsspeicherverluste zu identifizieren.
Weitere Informationen finden Sie unter Überwachen der Speichernutzung in Echtzeit (Browsertask-Manager).
Behandeln von Workflows für Leistungsprobleme
Wenn Leistungsprobleme in einer WebView2-App auftreten, verwenden Sie einen strukturierten Ansatz zur Problembehandlung gemäß den folgenden Strategien.
Testen mit einfachem Inhalt
Laden sie eine minimale HTML-Seite.
Wenn die Leistung bei einfachen Inhalten immer noch langsam ist, untersuchen Sie die Laufzeitinitialisierung oder Host-App-Faktoren.
Wenn die Leistung mit einfachen Inhalten schneller ist, konzentrieren Sie sich auf die Optimierung Ihrer Webinhalte.
Siehe auch:
Überprüfen der WebView2-Runtimeversion
Stellen Sie sicher, dass Sie die neueste WebView2-Runtime ausführen, keine veraltete Version oder Fallback-Edge-Installation. Aktualisieren Sie die WebView2-Runtime nach Bedarf.
Siehe auch:
- Aktualisieren der WebView2-Runtime unter Einrichten Ihrer Entwicklungsumgebung für WebView2.
- Verteilen Ihrer App und der WebView2-Runtime
Überwachen der Speicherauslastung
Verwenden Sie den Windows-Task-Manager, um den WebView2-Prozessspeicher zu überprüfen.
Ungewöhnliches Wachstum kann auf ein Leck hindeuten. Verwenden Sie WPR-Aufzeichnungen, um dies weiter zu debuggen.
Siehe auch:
Vergleichen von WebView2 mit Microsoft Edge
WebView2 verwendet die gleiche Kernbrowser-Engine wie Microsoft Edge. Überprüfen Sie den Fall sowohl mit Microsoft Edge als auch mit WebView2, um das Problem zu isolieren.