Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Use las siguientes prácticas para optimizar el tiempo de inicio, la memoria, la CPU y el uso de red de WebView2. Use estas herramientas y flujos de trabajo para solucionar problemas de rendimiento.
La inserción de Microsoft Edge WebView2 en aplicaciones de Windows habilita características web modernas. WebView2 usa la arquitectura multiproceso de Edge, por lo que cada control inicia varios procesos del motor del explorador que agregan memoria y sobrecarga de inicio.
Contenido detallado:
- Identificar el tipo de cuello de botella de rendimiento
- Uso del tiempo de ejecución Evergreen
- Optimizar el rendimiento de inicio
- Uso de memoria y administración de procesos
- Rendimiento de CPU y representación
- Rendimiento de red y carga
- Comunicación entre el control WebView2 y la aplicación host
- Herramientas de telemetría y generación de perfiles
- Solución de problemas de flujos de trabajo para problemas de rendimiento
- Ver también
Identificar el tipo de cuello de botella de rendimiento
Observe los síntomas del rendimiento lento para determinar si el problema es:
Retraso de inicio. Consulta Optimizar el rendimiento de inicio más abajo.
Uso elevado de memoria. Consulte Uso de memoria y administración de procesos más abajo.
Carga sostenida de CPU. Consulta Rendimiento de CPU y representación a continuación.
Carga de página lenta. Consulta Rendimiento de red y carga más abajo.
Uso del tiempo de ejecución Evergreen
Siempre que sea posible, implementa tu aplicación con el tiempo de ejecución Evergreen WebView2. El tiempo de ejecución Evergreen se actualiza automáticamente para obtener las últimas mejoras de rendimiento y correcciones de seguridad. Mantén el tiempo de ejecución de WebView2 siempre perenne (es decir, actualizado) para preparar tu aplicación para el futuro. Al usar una versión corregida, se corre el riesgo de perderse las optimizaciones recientes.
Si debes usar un tiempo de ejecución fijo por motivos de compatibilidad o sin conexión, actualízalo periódicamente después de probar nuevas compilaciones.
Prueba tu aplicación con los canales de vista previa de WebView2 más recientes (Beta, Dev o Canary) para prepararte para los próximos cambios. Muchos problemas de rendimiento anteriores, como pérdidas de memoria y uso elevado de CPU, se han solucionado en versiones más recientes del tiempo de ejecución de WebView2.
Si las versiones de Microsoft Edge y WebView2 coinciden, y Microsoft Edge se está ejecutando, los archivos binarios de WebView2 necesarios ya están en memoria, mejorando el rendimiento del inicio.
Vea también:
- El modo de distribución del tiempo de ejecución Evergreen en Distribuir la aplicación y el tiempo de ejecución de WebView2.
Optimizar el rendimiento de inicio
Arranque en frío (lanzamiento en frío)
Un cuello de botella común del rendimiento es el tiempo empleado para crear un control WebView2 y navegar a una página web por primera vez. En un lanzamiento en frío, WebView2 debe poner en marcha sus procesos y cachés de disco, lo que puede introducir un retraso considerable (que puede variar según el hardware y la complejidad del contenido).
Para optimizar el inicio, use las siguientes prácticas recomendadas.
No use WebView2 para la interfaz de usuario inicial
Para representar pantallas de presentación o cuadros de diálogo simples, use pantallas ligeras XAML o Win32 en lugar de WebView2.
Evita representar pantallas de presentación o cuadros de diálogo sencillos con WebView2, debido a los costes de inicio y a la contención de recursos. Inicialice WebView2 solo cuando muestre contenido web real.
Vea también:
Optimizar la ubicación de la carpeta de datos de usuario (UDF)
Mantenga la UDF en la carpeta de datos de la aplicación local predeterminada por motivos de rendimiento. Consulte Administrar carpetas de datos de usuario.
Evite unidades lentas o recursos compartidos de red; Coloque los datos en un disco físico más rápido.
Evitar instancias redundantes de WebView2
Planee la interfaz de usuario para no crear más controles WebView2 de los necesarios.
Por ejemplo, si navega entre varias páginas web, puede ser más rápido volver a usar un único WebView2 y simplemente navegar a una nueva dirección URL, en lugar de destruir y volver a crear un control WebView2.
Vea también:
Uso de memoria y administración de procesos
Cada control WebView2 crea su propio conjunto de procesos, como el explorador, el representador y la GPU. Por lo general, el uso de recursos crece a medida que se crean más instancias de WebView2, y cada instancia ejecuta su propio conjunto de procesos del explorador.
Una instancia de WebView2 usa memoria en función de la complejidad del contenido web y los procesos del explorador que crea. La ejecución de muchas instancias del control WebView2 puede agotar la memoria del sistema.
A continuación se muestran los procedimientos recomendados para administrar y reducir la superficie de memoria.
Compartir entornos WebView2
Para ahorrar memoria, use uno
CoreWebView2Environmenten todos los controles WebView2 de una aplicación, garantizando parámetros coherentes para compartir.Reutilice el mismo entorno en interfaces con pestañas, en lugar de crear varios entornos.
Vea también:
Uso compartido de procesos a nivel de aplicación
Si es posible, use el uso compartido de procesos a nivel de aplicación.
Varias aplicaciones pueden compartir un proceso del explorador mediante la carpeta de datos de usuario idéntica y
CoreWebView2EnvironmentOptions. Esto reduce el uso de memoria, pero requiere una administración cuidadosa de los perfiles y pruebas exhaustivas, debido a posibles interferencias entre aplicaciones.Tenga en cuenta que al compartir una carpeta de datos de usuario (UDF), los datos subyacentes (como cookies, cachés y bases de datos) se comparten entre diferentes aplicaciones.
Vea también:
Evitar objetos host de ámbito grande
Si usa AddHostObjectToScript exponer objetos .NET en la web, tenga en cuenta lo que esos objetos contienen en la memoria. Se hace referencia a todo el objeto de forma eficaz siempre que el contexto del script continúe activo, lo que podría impedir la recopilación de elementos no utilizados de ese objeto en el lado de .NET.
No exponga un gráfico de objetos muy grande, si solo se necesita una pequeña parte para el scripting. Prefiere crear objetos host estrechos y específicos para un propósito, en lugar de pasar modelos de aplicación completos. Por ejemplo:
Exponga solo las operaciones y los datos que la página necesita realmente. Por ejemplo, exponga un
FileServiceobjeto, en lugar de todo elAppContextarchivoEnvuelva objetos complejos detrás de fachadas pequeñas para evitar exponer involuntariamente jerarquías de objetos profundos.
Para las colecciones, proporcione resultados filtrados o paginados en lugar de exponer la estructura de datos completa.
Cuando la página que necesitaba el objeto haya desaparecido, llame CoreWebView2.RemoveHostObjectFromScript para liberar el gráfico de objetos. Por ejemplo, si sales de una página que estaba usando un objeto host, quita ese objeto para evitar mantenerlo activo en segundo plano.
Vea también:
- Uso compartido de objetos host/web en Información general sobre las API de WebView2.
Evitar pérdidas de memoria
Quite los controladores de eventos nativos antes de eliminar los objetos WebView2, para evitar ciclos de referencia y pérdidas.
Evita los cierres que hacen referencia a WebView2; Use referencias débiles cuando sea necesario.
Llamada
WebView2.Dispose()para liberar objetos WebView2 cuando ya no sean necesarios.
Vea también:
- Método WebView2.Dispose(Boolean): WPF.
- Método WebView2.Dispose(Boolean): WinForms.
- Solucionar problemas de memoria
Usar API de administración de memoria
Establecer
MemoryUsageTargetLevel = CoreWebView2MemoryUsageTargetLevel.Lowen WebViews inactivos para reducir el uso de memoria: esto puede hacer que el motor del explorador descarte los datos almacenados en caché o intercambie memoria al disco. Cuando la instancia de WebView2 vuelva a estar activa, restaure el nivel de destino aNormal, para obtener el rendimiento completo. Consulte Destino de uso de memoria en Información general sobre las API de WebView2.Si la instancia WebView2 no se va a usar durante un tiempo, llame
CoreWebView2.TrySuspendAsync()para suspender el proceso del representador, lo que pausa los scripts y disminuye aún más el uso de recursos. Reanuda cuandoResume()sea necesario. EstasTryoperaciones requieren el mejor esfuerzo. Consulte Rendimiento y depuración en Introducción a las API de WebView2.
Optimizar el contenido web
- Optimice el contenido web representado. Observe si se usa memoria excesiva en el montón de JavaScript. Use Microsoft Edge DevTools, como la herramienta Memoria , para supervisar el uso de los recursos de memoria por diversos contenidos web. Consulte Grabar instantáneas de montón con la herramienta Memoria (tipo de generación de perfiles "instantánea de montón").
Actualizar periódicamente WebView2
Actualice periódicamente la instancia de WebView2. En escenarios donde el ciclo de vida de la página acumula naturalmente el estado, como una página web de larga duración, actualizar la instancia de WebView2 ayuda a devolver el proceso de WebView2 a una línea base limpia.
Algunas páginas de larga duración pueden retener recursos a lo largo del tiempo, según el contenido web y el diseño de la aplicación. Si el uso de memoria crece de forma inesperada, inspeccione lo siguiente con DevTools:
Uso del montón de JavaScript. Vea:
Escucha de eventos. Vea:
- Analice la falta de compatibilidad con el teclado mediante la pestaña Detectores de eventos de Analizar la compatibilidad de teclado en formularios, sobre la pestaña Detectores de eventos de la herramienta Elementos .
- Seleccione las métricas de rendimiento que desea supervisar en Medir el rendimiento en tiempo de ejecución de una página mediante la herramienta Monitor de rendimiento, sobre la métrica de oyentes de eventos de JS .
Retención de DOM. Vea:
Rendimiento de CPU y representación
WebView2 descarga la representación de contenido web en el motor del explorador que usa Edge, por lo que las características de rendimiento son como ejecutar un sitio en Edge.
Las siguientes prácticas garantizan un uso eficaz de la CPU y una representación sin problemas.
Habilitar la aceleración de hardware
No deshabilite el uso de la GPU por WebView2 para la representación (a través de la
disable-gpumarca), excepto cuando esté solucionando problemas.De forma predeterminada, WebView2 usa la GPU para la representación. El uso de la GPU por WebView2 es fundamental para el rendimiento. Se deben asignar controladores de GPU y búferes adicionales, lo que requiere memoria adicional.
Vea también
-
Marcas del explorador WebView2 -
disable-gpu
Simplificar el contenido web
Optimiza las páginas mediante las siguientes técnicas:
Limitar JavaScript pesado.
Anule o limite las tareas.
Use CSS (en lugar de JavaScript) para las animaciones.
Divida los scripts largos para mantener la capacidad de respuesta de la interfaz de usuario.
Use Microsoft Edge DevTools para identificar cuellos de botella.
Usa la optimización web típica: evita el thrashing excesivo del diseño, donde un script alterna entre leer y escribir propiedades DOM, causando múltiples reflujos.
Vea también:
- Herramienta Rendimiento: Analizar el rendimiento de su sitio web
- Analizar el rendimiento en tiempo de ejecución (tutorial)
- Solución de problemas comunes de rendimiento
- Optimizar la velocidad de un sitio web con Lighthouse
Reducir la comunicación innecesaria
Reducir la comunicación innecesaria entre la aplicación host y el contenido web hospedado en WebView2. Esto evita una comunicación excesiva entre procesos, junto con la sobrecarga que lo acompaña. Consulte Interoperabilidad de código nativo y web.
Envíe mensajes por lotes siempre que sea posible, ya que el paso frecuente de mensajes puede aumentar el uso de CPU.
Administrar prioridad de procesos
- Si la aplicación tiene una carga de trabajo nativa pesada, asigne prioridades de subprocesos con cuidado para evitar que los subprocesos WebView2 se queden sin energía. WebView2 crea procesos de representación independientes.
Vea también:
Probar escenarios reales
- Pruebe el contenido real en el hardware de destino con Microsoft Edge DevTools para buscar y optimizar los problemas de rendimiento.
Vea también:
Rendimiento de red y carga
La latencia de red y el ancho de banda limitado pueden provocar problemas de rendimiento percibidos por el usuario, especialmente al cargar contenido web en un control WebView2.
Las siguientes prácticas recomendadas se superponen con el desarrollo web general.
Usar almacenamiento en caché y trabajadores de servicio
WebView2 admite el almacenamiento en caché del explorador.
Use el almacenamiento en caché y los trabajos de servicio.
Sirva encabezados de caché adecuados, de modo que las solicitudes repetidas de recursos utilicen versiones en caché.
Considere la posibilidad de almacenar previamente en caché los archivos estáticos mediante un trabajo de servicio, para tener acceso sin conexión; Supervise el tamaño de la memoria caché.
Vea también:
Compruebe los cuellos de botella de la red
Utilice la herramienta Red DevTools para identificar recursos lentos en WebView2; consulte Inspeccionar actividad de red.
Optimice o cargue de forma asíncrona scripts o API lentos de terceros, según sea necesario.
Reducir las cargas útiles iniciales
Para mejorar la velocidad percibida:
Mantenga ligera la carga útil inicial. Prefiere enviar HTML estático inicialmente, porque generalmente carga, analiza y representa más rápido que JavaScript. Tenga cuidado al usar inicialmente JavaScript junto con un marco de aplicación de una sola página; Dicho marco generalmente carga una gran cantidad de código al inicio, lo que puede retrasar la representación inicial del contenido web.
HTML carga, analiza y representa muy rápido, más rápido que el tiempo que le habría tomado a JavaScript producir la misma interfaz de usuario. Con algunos marcos JS de aplicaciones de una sola página, incluso si el HTML inicial del marco es pequeño, todo el código del marco debe descargarse, analizarse y ejecutarse antes de que se pueda mostrar algo.
Aplazar componentes pesados.
Cargar imágenes o scripts de forma diferida después de que aparezca la interfaz de usuario inicial.
Vea también:
- Elimine los recursos que bloquean el procesamiento en Optimice la velocidad del sitio web con Lighthouse.
Comunicación entre el control WebView2 y la aplicación host
Elegir el canal de comunicación adecuado
WebView2 ofrece varias opciones de comunicación de web a host y de host a web.
Intente usar mensajes web en lugar de objetos host. Los mensajes web tienden a ser más rápidos que los objetos host, tanto por el uso de memoria como por el tiempo, debido a la simplicidad y confiabilidad de los mensajes web.
Use objetos host solo cuando necesite funcionalidades que los mensajes web no pueden expresar fácilmente, como:
API ricas y similares a objetos (métodos, propiedades, eventos) que desea exponer directamente a JavaScript.
Interacciones con estado, en las que mantener el contexto del lado host es más sencillo que pasar mensajes estructurados de un lado a otro.
Los flujos de datos grandes o binarios en los que la serialización repetida de cadenas en mensajes web se vuelve ineficaz.
Los objetos host tienen los siguientes inconvenientes:
Los objetos host requieren la serialización COM, que puede introducir inestabilidad si el gráfico de objetos cambia o no se serializa correctamente.
Los objetos host suelen ser más lentos para las llamadas frecuentes y habladoras en comparación con un solo lote ,
WebMessageporque cada método o acceso a la propiedad cruza el límite individualmente.Los objetos host crean un acoplamiento más estrecho entre el código web y el código del host, lo que reduce la portabilidad.
Vea también:
Optimizar la comunicación
Implemente la comunicación asíncrona por lotes para minimizar la comunicación IPC y reducir la copia de datos.
Vea también:
- Interoperabilidad nativa y web en Información general sobre las API de WebView2.
- Interoperabilidad de código nativo y código web
Herramientas de telemetría y generación de perfiles
La recopilación de datos es clave para identificar y solucionar problemas de rendimiento.
Las siguientes son herramientas y técnicas de telemetría para WebView2.
Seguimiento ETW de WebView2
Use el perfil de Microsoft (recopilación de un seguimiento de ETW) con Windows Performance Recorder para capturar y analizar eventos WebView2 detallados, como inicios WebView2.wprp de procesos e intervalos de navegación.
Puede grabar eventos de proveedor de Edge/WebView2 mediante el seguimiento de eventos para Windows (ETW); consulte Recopilación de un seguimiento ETW.
Analice los seguimientos en el Analizador de rendimiento de Windows para obtener datos de CPU, disco y memoria.
Microsoft Edge DevTools
Use Microsoft Edge DevTools para supervisar el contenido y los procesos de WebView2 e identificar problemas como pérdidas elevadas de CPU o memoria.
Haga clic con el botón secundario en un control WebView2 en una aplicación WebView2 y, a continuación, seleccione Inspeccionar. Por ejemplo, haga clic con el botón derecho en la aplicación principal de ejemplo de Win32 y, a continuación, haga clic en Inspeccionar. DevTools se abre en una ventana del explorador dedicada desacoplada.
En DevTools, puede usar herramientas como las herramientas Memoria y Rendimiento :
Vea también:
- Depurar aplicaciones WebView2 con Microsoft Edge DevTools
- Herramienta Rendimiento: Analizar el rendimiento de su sitio web
- Solucionar problemas de memoria : la herramienta Memoria .
Inspección con herramientas de desarrollo de Edge
Use edge://inspect, que abre la pestaña Inspeccionar con herramientas de desarrollo de Edge para supervisar el contenido y los procesos de WebView2 e identificar problemas como pérdidas elevadas de CPU o memoria:
Para obtener más información sobre cómo inspeccionar un proceso WebView2 mediante edge://inspect, consulte Depuración remota de aplicaciones WebView2 WinUI 2 (UWP) de escritorio.
Administrador de tareas del explorador
Utilice el Administrador de tareas del explorador para supervisar el contenido y los procesos de WebView2 e identificar problemas como pérdidas de memoria o CPU elevadas.
Consulte Supervisar el uso de memoria en tiempo real (Administrador de tareas del explorador).
Solución de problemas de flujos de trabajo para problemas de rendimiento
Cuando surjan problemas de rendimiento en una aplicación WebView2, use un enfoque estructurado para solucionarlos, según las siguientes estrategias.
Probar con contenido simple
Carga una página HTML mínima.
Si el rendimiento sigue siendo lento con contenido simple, investigue la inicialización en tiempo de ejecución o los factores de la aplicación host.
Si el rendimiento es más rápido con contenido simple, concéntrese en optimizar el contenido web.
Vea también:
Comprobar la versión del entorno de ejecución de WebView2
Asegúrese de que está ejecutando el entorno de ejecución de WebView2 más reciente, no una versión obsoleta o una instalación de Edge de reserva. Actualiza el tiempo de ejecución de WebView2 según sea necesario.
Vea también:
- Actualización del tiempo de ejecución de WebView2 en Configuración del entorno de desarrollo para WebView2.
- Distribuir la aplicación y el tiempo de ejecución de WebView2
Supervisar el uso de la memoria
Use el Administrador de tareas de Windows para comprobar la memoria del proceso WebView2.
Un crecimiento inusual puede indicar una fuga: use las grabaciones de WPR para depurarlo aún más.
Vea también:
Comparar WebView2 con Microsoft Edge
WebView2 usa el mismo motor de explorador principal que Microsoft Edge. Valide el caso con Microsoft Edge, así como con WebView2, para aislar el problema.