Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Utilisez les pratiques suivantes pour optimiser le temps de démarrage, la mémoire, le processeur et l’utilisation du réseau de WebView2. Utilisez ces outils et workflows pour résoudre les problèmes de performances.
L’incorporation de Microsoft Edge WebView2 dans les applications Windows permet d’activer des fonctionnalités web modernes. WebView2 utilise l’architecture multiprocesseur d’Edge. Chaque contrôle lance donc plusieurs processus de moteur de navigateur qui ajoutent de la mémoire et de la surcharge au démarrage.
Contenu détaillé :
- Identifier le type de goulot d’étranglement des performances
- Utiliser le runtime persistant
- Optimiser les performances de démarrage
- Utilisation de la mémoire et gestion des processus
- Performances du processeur et du rendu
- Performances du réseau et du chargement
- Communication entre le contrôle WebView2 et l’application hôte
- Outils de télémétrie et de profilage
- Résolution des problèmes de performances des workflows
- Voir aussi
Identifier le type de goulot d’étranglement des performances
Observez les symptômes de la lenteur des performances pour déterminer si le problème est :
Décalage de démarrage. Consultez Optimiser les performances de démarrage ci-dessous.
Utilisation élevée de la mémoire. Consultez Utilisation de la mémoire et gestion des processus, ci-dessous.
Charge de processeur soutenue. Consultez Performances du processeur et du rendu ci-dessous.
Chargement de page lent. Consultez Performances du réseau et du chargement ci-dessous.
Utiliser le runtime persistant
Dans la mesure du possible, déployez votre application avec le runtime Evergreen WebView2. Le runtime Evergreen se met automatiquement à jour pour obtenir les dernières améliorations des performances et les derniers correctifs de sécurité. Conservez le runtime WebView2 persistant (autrement dit, mis à jour) pour assurer la pérenne de votre application. L’utilisation d’une version fixe risque de manquer les optimisations récentes.
Si vous devez utiliser un runtime fixe pour des raisons de compatibilité ou hors connexion, mettez-le à jour régulièrement après avoir testé de nouvelles builds.
Testez votre application à l’aide des derniers canaux de préversion WebView2 (bêta, dev ou canary) pour vous préparer aux modifications à venir. De nombreux problèmes de performances passés, tels que les fuites de mémoire et l’utilisation élevée du processeur, ont été résolus dans les versions plus récentes du runtime WebView2.
Si les versions de Microsoft Edge et WebView2 correspondent et que Microsoft Edge est en cours d’exécution, les fichiers binaires WebView2 requis sont déjà en mémoire, ce qui améliore les performances de lancement.
Voir aussi :
- Mode de distribution Evergreen Runtime dans Distribuer votre application et le runtime WebView2.
Optimiser les performances de démarrage
Démarrage à froid (lancement à froid)
Un goulot d’étranglement des performances courant est le temps de créer un contrôle WebView2 et d’accéder à une page web pour la première fois. Lors d’un lancement à froid, WebView2 doit faire tourner ses processus et caches de disque, ce qui peut introduire un délai notable (qui peut varier en fonction de la complexité matérielle et du contenu).
Pour optimiser le démarrage, utilisez les meilleures pratiques suivantes.
N’utilisez pas WebView2 pour l’interface utilisateur initiale
Pour afficher des écrans de démarrage ou des boîtes de dialogue simples, utilisez des écrans XAML ou Win32 légers au lieu de WebView2.
Évitez le rendu des écrans de démarrage ou des boîtes de dialogue simples avec WebView2, en raison des coûts de démarrage et de la contention des ressources. Initialisez WebView2 uniquement lors de l’affichage du contenu web réel.
Voir aussi :
Optimiser l’emplacement du dossier de données utilisateur (UDF)
Conservez la fonction définie par l’utilisateur dans le dossier de données de l’application locale par défaut pour les performances. Consultez Gérer les dossiers de données utilisateur.
Évitez les lecteurs lents ou les partages réseau ; placer les données sur un disque physique plus rapide.
Éviter les instances WebView2 redondantes
Planifiez votre interface utilisateur afin de ne pas créer plus de contrôles WebView2 que nécessaire.
Par exemple, si vous naviguez entre plusieurs pages web, il peut être plus rapide de réutiliser un seul WebView2 et de le naviguer simplement vers une nouvelle URL, plutôt que de détruire et recréer un contrôle WebView2.
Voir aussi :
Utilisation de la mémoire et gestion des processus
Chaque contrôle WebView2 crée son propre ensemble de processus, tels que le navigateur, le renderer et le GPU. L’utilisation des ressources augmente généralement à mesure que de plus en plus d’instances WebView2 sont créées, chaque instance exécutant son propre ensemble de processus de navigateur.
Un instance WebView2 utilise la mémoire en fonction de la complexité du contenu web et des processus de navigateur qu’il crée. L’exécution de nombreuses instances du contrôle WebView2 peut épuiser la mémoire système.
Voici les meilleures pratiques pour gérer et réduire l’empreinte mémoire.
Partager des environnements WebView2
Pour économiser de la mémoire, utilisez-en un
CoreWebView2Environmentsur tous les contrôles WebView2 d’une application, ce qui garantit la cohérence des paramètres de partage.Réutilisez le même environnement dans les interfaces à onglets plutôt que de créer plusieurs environnements.
Voir aussi :
Utiliser le partage de processus au niveau de l’application
Si possible, utilisez le partage de processus au niveau de l’application.
Plusieurs applications peuvent partager un processus de navigateur à l’aide du dossier de données utilisateur et
CoreWebView2EnvironmentOptionsde . Cela réduit l’utilisation de la mémoire, mais nécessite une gestion minutieuse des profils et des tests approfondis, en raison d’interférences entre applications possibles.Gardez à l’esprit que lors du partage d’un dossier de données utilisateur (UDF), les données sous-jacentes (telles que les cookies, les caches et les bases de données) sont partagées entre différentes applications.
Voir aussi :
Éviter les objets hôtes de grande étendue
Si vous utilisez AddHostObjectToScript pour exposer des objets .NET sur le web, gardez à l’esprit ce que ces objets contiennent en mémoire. L’objet entier est effectivement référencé tant que le contexte de script continue à vivre, ce qui peut empêcher le garbage collection de cet objet côté .NET.
N’exposez pas un graphe d’objets très volumineux, si seule une petite partie est nécessaire pour l’écriture de scripts. Préférez la création d’objets hôtes étroits et spécifiques à l’objectif, au lieu de passer des modèles d’application complets. Par exemple :
Exposez uniquement les opérations et les données dont la page a réellement besoin. Par exemple, exposez un
FileServiceobjet, au lieu de votre intégralitéAppContext.Encapsulez des objets complexes derrière de petites façades pour éviter d’exposer involontairement des hiérarchies d’objets profondes.
Pour les collections, fournissez des résultats filtrés ou paginés au lieu d’exposer la structure de données complète.
Lorsque la page qui avait besoin de l’objet a disparu, appelez CoreWebView2.RemoveHostObjectFromScript pour libérer le graphique d’objet. Par exemple, si vous quittez une page qui utilisait un objet hôte, supprimez cet objet pour éviter qu’il reste actif en arrière-plan.
Voir aussi :
- Partage d’objets hôte/web dans Vue d’ensemble des API WebView2.
Empêcher les fuites de mémoire
Supprimez les gestionnaires d’événements natifs avant de supprimer les objets WebView2 pour éviter les cycles de référence et les fuites.
Évitez les fermetures qui font fortement référence à WebView2 ; utilisez des références faibles si nécessaire.
Appelez
WebView2.Dispose()pour libérer les objets WebView2 lorsqu’ils ne sont plus nécessaires.
Voir aussi :
- Méthode WebView2.Dispose(Boolean) - WPF.
- Méthode WebView2.Dispose(Boolean) - WinForms.
- Résoudre les problèmes de mémoire
Utiliser les API de gestion de la mémoire
Défini
MemoryUsageTargetLevel = CoreWebView2MemoryUsageTargetLevel.Lowsur les WebViews inactifs pour réduire l’utilisation de la mémoire. Cela peut inviter le moteur du navigateur à supprimer les données mises en cache ou à permuter la mémoire sur le disque. Lorsque le instance WebView2 est à nouveau actif, restaurez le niveau cible surNormal, pour des performances optimales. Consultez Cible d’utilisation de la mémoire dans Vue d’ensemble des API WebView2.Si le instance WebView2 ne sera pas utilisé pendant un certain temps, appelez
CoreWebView2.TrySuspendAsync()pour suspendre le processus du renderer, ce qui interrompt les scripts et diminue encore l’utilisation des ressources. Reprenez avec siResume()nécessaire. CesTryopérations sont du meilleur effort. Consultez Performances et débogage dans Vue d’ensemble des API WebView2.
Optimiser le contenu web
- Optimisez le contenu web rendu. Observez si une mémoire excessive est utilisée dans le tas JavaScript. Utilisez Microsoft Edge DevTools, comme l’outil Mémoire , pour surveiller l’utilisation des ressources mémoire par divers contenus web. Consultez Enregistrer des instantanés de segment de mémoire à l’aide de l’outil mémoire (type de profilage « Tas instantané ») .
Actualiser régulièrement webView2
Actualisez régulièrement le instance WebView2. Dans les scénarios où le cycle de vie de la page accumule naturellement l’état, comme une page web de longue durée, l’actualisation de l’instance WebView2 permet de renvoyer le processus WebView2 à une base de référence propre.
Certaines pages longues peuvent conserver des ressources au fil du temps, en fonction du contenu web et de la conception de l’application. Si l’utilisation de la mémoire augmente de façon inattendue, examinez les éléments suivants à l’aide de DevTools :
Utilisation du tas JavaScript. Voir :
Écouteurs d’événements. Voir :
- Analysez l’absence de prise en charge du clavier à l’aide de l’onglet Écouteurs d’événements dans Analyser la prise en charge du clavier sur les formulaires, à propos de l’onglet Écouteurs d’événements de l’outil Éléments .
- Sélectionnez les métriques de performances à surveiller dans Mesurer les performances d’exécution d’une page à l’aide de l’outil Analyseur de performances, à propos de la métrique des écouteurs d’événements JS .
Rétention DOM. Voir :
Performances du processeur et du rendu
WebView2 décharge le rendu du contenu web vers le moteur de navigateur utilisé par Edge. Les caractéristiques de performances sont donc similaires à l’exécution d’un site dans Edge.
Les pratiques suivantes garantissent une utilisation efficace du processeur et un rendu fluide.
Activer l’accélération matérielle
Ne désactivez pas l’utilisation du GPU par WebView2 pour le rendu (via l’indicateur
disable-gpu), sauf lorsque vous résolvez des problèmes.Par défaut, WebView2 utilise le GPU pour le rendu. L’utilisation du GPU par WebView2 est essentielle pour les performances. Des pilotes GPU et des mémoires tampons supplémentaires doivent être alloués, ce qui nécessite de la mémoire supplémentaire.
Voir aussi
-
Indicateurs de navigateur WebView2 -
disable-gpu
Simplifier le contenu web
Optimisez les pages à l’aide des techniques suivantes :
Limitez le code JavaScript lourd.
Débounce ou limiter les tâches.
Utilisez CSS (plutôt que JavaScript) pour les animations.
Fractionnez les scripts longs pour que l’interface utilisateur reste réactive.
Utilisez Microsoft Edge DevTools pour identifier les goulots d’étranglement.
Utilisez l’optimisation web classique : évitez les thrashings de disposition excessifs, où un script alterne entre la lecture et l’écriture de propriétés DOM, ce qui provoque plusieurs reflows.
Voir aussi :
- Outil de performances : analyser les performances de votre site web
- Analyser les performances du runtime (tutoriel)
- Résolution des problèmes de performances courants
- Optimiser la vitesse du site web à l’aide de Lighthouse
Réduire les communications inutiles
Réduisez les communications inutiles entre l’application hôte et le contenu web hébergé dans WebView2. Cela permet d’éviter une communication interprocessus excessive, ainsi que la surcharge associée. Consultez Interopérabilité du code natif et du code web.
Traiter les messages par lot dans la mesure du possible, car le passage fréquent de messages peut augmenter l’utilisation du processeur.
Gérer la priorité du processus
- Si l’application a une charge de travail native lourde, affectez soigneusement les priorités des threads pour éviter d’affamer les threads WebView2. WebView2 crée des processus de renderer distincts.
Voir aussi :
Tester des scénarios réels
- Testez votre contenu réel sur le matériel cible, en utilisant Microsoft Edge DevTools pour rechercher et optimiser les problèmes de performances.
Voir aussi :
Performances du réseau et du chargement
La latence du réseau et la bande passante limitée peuvent entraîner des problèmes de performances perçus par l’utilisateur, en particulier lors du chargement de contenu web dans un contrôle WebView2.
Les bonnes pratiques suivantes se chevauchent avec le développement web général.
Utiliser la mise en cache et les workers de service
WebView2 prend en charge la mise en cache du navigateur.
Utilisez la mise en cache et les workers de service.
Servez les en-têtes de cache appropriés, afin que les demandes de ressources répétées utilisent des versions mises en cache.
Envisagez de pré-mettre en cache les fichiers statiques à l’aide d’un worker de service, pour l’accès hors connexion ; mais surveillez la taille du cache.
Voir aussi :
- Mise en cache HTTP sur MDN.
- Afficher les données du cache
- Utilisation de Workers de service sur MDN.
Vérifier les goulots d’étranglement réseau
Utilisez l’outil Réseau DevTools pour identifier les ressources lentes dans WebView2 ; Consultez Inspecter l’activité réseau.
Optimisez ou chargez de manière asynchrone des scripts ou des API tierces lents, selon les besoins.
Réduire les charges utiles initiales
Pour améliorer la vitesse perçue :
Gardez la charge utile initiale légère. Préférez d’abord envoyer du code HTML statique, car il charge, analyse et affiche généralement plus rapidement que JavaScript. Soyez prudent lors de l’utilisation initiale de JavaScript avec une infrastructure d’application monopage ; Une telle infrastructure charge généralement beaucoup de code au démarrage, ce qui peut retarder le rendu initial du contenu web.
HTML charge, analyse et restitue très rapidement, plus rapidement que le temps nécessaire à JavaScript pour produire la même interface utilisateur. Avec certaines infrastructures JS d’application monopage, même si le code HTML initial de l’infrastructure est petit, l’ensemble du code de framework doit être téléchargé, analysé et exécuté avant que quoi que ce soit puisse être affiché.
Différer les composants lourds.
Images ou scripts à chargement différé après l’affichage de l’interface utilisateur initiale.
Voir aussi :
- Éliminez les ressources bloquant le rendu dans Optimiser la vitesse du site web à l’aide de Lighthouse.
Communication entre le contrôle WebView2 et l’application hôte
Choisir le canal de communication approprié
WebView2 fournit diverses options de communication web-à-hôte et hôte à web.
Essayez d’utiliser des messages web plutôt que des objets hôtes. Les messages web ont tendance à être plus rapides que les objets hôtes, en raison de l’utilisation de la mémoire et du temps, en raison de la simplicité et de la fiabilité des messages web.
Utilisez des objets hôtes uniquement lorsque vous avez besoin de fonctionnalités que les messages web ne peuvent pas exprimer facilement, telles que :
API riches de type objet (méthodes, propriétés, événements) que vous souhaitez exposer directement à JavaScript.
Interactions avec état où la gestion du contexte côté hôte est plus simple que le passage de messages structurés d’un bout à l’autre.
Des flux de données volumineux ou binaires où la sérialisation répétée de charges utiles dans des messages web devient inefficace.
Les objets hôtes présentent les inconvénients suivants :
Les objets hôtes nécessitent le marshaling COM, qui peut introduire une instabilité si le graphique d’objets change ou n’est pas marshalé correctement.
Les objets hôtes sont généralement plus lents pour les appels bavards et fréquents par rapport à un seul lot
WebMessage, car chaque méthode ou chaque accès à une propriété franchit la limite individuellement.Les objets hôtes créent un couplage plus étroit entre le code web et le code hôte, ce qui réduit la portabilité.
Voir aussi :
Optimiser la communication
Implémentez la communication asynchrone par lots pour réduire la communication IPC et réduire la copie des données.
Voir aussi :
- Interopérabilité web/native dans Vue d’ensemble des API WebView2.
- Interopérabilité du code natif et du code web
Outils de télémétrie et de profilage
La collecte de données est essentielle pour identifier et résoudre les problèmes de performances.
Voici des outils et des techniques de télémétrie pour WebView2.
Suivi ETW WebView2
Utilisez le WebView2.wprp profil Microsoft (Collecte d’une trace ETW) avec l’Enregistreur de performances Windows pour capturer et analyser des événements WebView2 détaillés, tels que les lancements de processus et les minutages de navigation.
Vous pouvez enregistrer les événements du fournisseur Edge/WebView2 à l’aide du suivi d’événements pour Windows (ETW) ; consultez Collecte d’une trace ETW.
Analysez les traces dans Windows Analyseur de performances pour les données de processeur, de disque et de mémoire.
Microsoft Edge DevTools
Utilisez Microsoft Edge DevTools pour surveiller le contenu et les processus WebView2, afin d’identifier les problèmes tels que les fuites élevées de processeur ou de mémoire.
Cliquez avec le bouton droit sur un contrôle WebView2 dans une application WebView2, puis sélectionnez Inspecter. Par exemple, cliquez avec le bouton droit sur l’exemple d’application win32 principal, puis cliquez sur Inspecter. DevTools s’ouvre dans une fenêtre de navigateur dédiée non attachée.
Dans DevTools, vous pouvez utiliser des outils tels que l’outil Mémoire et l’outil Performances :
Voir aussi :
- Déboguer des applications WebView2 avec Microsoft Edge DevTools
- Outil de performances : analyser les performances de votre site web
- Résoudre les problèmes de mémoire : outil Mémoire .
Inspecter avec les outils de développement Edge
Utilisez edge://inspect, qui ouvre l’onglet Inspecter avec les outils de développement Edge , pour surveiller le contenu et les processus WebView2, afin d’identifier les problèmes tels que les fuites élevées de processeur ou de mémoire :
Pour en savoir plus sur l’inspection d’un processus WebView2 à l’aide edge://inspectde , consultez Débogage à distance des applications WebView2 WinUI 2 (UWP).
Gestionnaire des tâches du navigateur
Utilisez le Gestionnaire des tâches du navigateur pour surveiller le contenu et les processus WebView2, afin d’identifier les problèmes tels que les fuites élevées de processeur ou de mémoire.
Consultez Surveiller l’utilisation de la mémoire en temps réel (Gestionnaire des tâches du navigateur).
Résolution des problèmes de performances des workflows
Lorsque des problèmes de performances surviennent dans une application WebView2, utilisez une approche structurée pour résoudre les problèmes, conformément aux stratégies suivantes.
Tester avec du contenu simple
Chargez une page HTML minimale.
Si les performances sont toujours lentes avec du contenu simple, examinez les facteurs d’initialisation du runtime ou d’application hôte.
Si les performances sont plus rapides avec du contenu simple, concentrez-vous sur l’optimisation de votre contenu web.
Voir aussi :
Vérifier la version du runtime WebView2
Vérifiez que vous exécutez la dernière version du runtime WebView2, et non une version obsolète ou une installation Edge de secours. Mettez à jour le runtime WebView2 en fonction des besoins.
Voir aussi :
- Mise à jour du runtime WebView2 dans Configurer votre environnement de développement pour WebView2.
- Distribuer votre application et le runtime WebView2
Surveiller l’utilisation de la mémoire
Utilisez le Gestionnaire des tâches Windows pour case activée mémoire de processus WebView2.
Une croissance inhabituelle peut indiquer une fuite : utilisez des enregistrements WPR pour le déboguer davantage.
Voir aussi :
Comparer WebView2 avec Microsoft Edge
WebView2 utilise le même moteur de navigateur principal que Microsoft Edge. Validez le cas avec Microsoft Edge, ainsi qu’avec WebView2, pour isoler le problème.