Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Используйте следующие методики для оптимизации времени запуска WebView2, памяти, ЦП и использования сети. Используйте эти средства и рабочие процессы для устранения неполадок с производительностью.
Внедрение Microsoft Edge WebView2 в приложения для Windows позволяет использовать современные веб-функции. WebView2 использует многопроцессную архитектуру Edge, поэтому каждый элемент управления запускает несколько процессов подсистемы браузера, которые добавляют объем памяти и запуска.
Подробное содержимое:
- Определение типа узкого места производительности
- Использование среды выполнения Evergreen
- Оптимизация производительности при запуске
- Использование памяти и управление процессами
- Производительность ЦП и отрисовки
- Производительность сети и загрузки
- Обмен данными между элементом управления WebView2 и ведущим приложением
- Средства телеметрии и профилирования
- Устранение неполадок рабочих процессов при проблемах с производительностью
- См. также
Определение типа узкого места производительности
Понаблюдайте за симптомами низкой производительности, чтобы определить, связана ли проблема:
Задержка запуска. См . раздел Оптимизация производительности при запуске ниже.
Использование большого объема памяти. См. раздел Использование памяти и управление процессами ниже.
Устойчивая загрузка ЦП. См . раздел Производительность ЦП и отрисовки ниже.
Медленная загрузка страницы. См . раздел Производительность сети и загрузки ниже.
Использование среды выполнения Evergreen
По возможности развертывайте приложение с помощью среды выполнения Evergreen WebView2. Среда выполнения Evergreen обновляется автоматически, чтобы получить последние улучшения производительности и исправления безопасности. Сохраняйте среду выполнения WebView2 постоянной (то есть обновляемой), чтобы обеспечить будущее подтверждение приложения. Использование фиксированной версии может отсутствовать в последних оптимизациях.
Если необходимо использовать фиксированную среду выполнения для автономного использования или для обеспечения совместимости, регулярно обновляйте ее после тестирования новых сборок.
Протестируйте приложение с помощью последних каналов предварительной версии WebView2 (бета-версия, разработка или Canary), чтобы подготовиться к предстоящим изменениям. Многие прошлые проблемы с производительностью, такие как утечка памяти и высокая загрузка ЦП, были устранены в более новых версиях среды выполнения WebView2.
Если версии Microsoft Edge и WebView2 совпадают, а Microsoft Edge работает, необходимые двоичные файлы WebView2 уже находятся в памяти, что повышает производительность запуска.
См. также:
- Режим распределения Evergreen Runtime в разделе Распространение приложения и среды выполнения WebView2.
Оптимизация производительности при запуске
Холодный запуск (холодный запуск)
Распространенным узким местом производительности является время создания элемента управления WebView2 и первого перехода на веб-страницу. При холодном запуске WebView2 необходимо развернуть процессы и кэши дисков, что может привести к заметной задержке (которая может отличаться в зависимости от сложности оборудования и содержимого).
Чтобы оптимизировать запуск, используйте следующие рекомендации.
Не используйте WebView2 для начального пользовательского интерфейса
Для отображения экранов-заставок или простых диалоговых окон используйте упрощенные экраны XAML или Win32 вместо WebView2.
Избегайте отображения экранов-заставок или простых диалоговых окон с помощью WebView2 из-за затрат на запуск и состязания за ресурсы. Инициализация WebView2 только при отображении фактического веб-содержимого.
См. также:
Оптимизация расположения папки данных пользователя (UDF)
Для повышения производительности сохраните определяемую пользователем папку в папке данных локального приложения по умолчанию. См. раздел Управление папками данных пользователя.
Избегайте медленных дисков или сетевых ресурсов; поместите данные на более быстрый физический диск.
Избегайте избыточных экземпляров WebView2
Планируйте пользовательский интерфейс так, чтобы не создавать больше элементов управления WebView2, чем необходимо.
Например, при переходе между несколькими веб-страницами может быть быстрее повторно использовать один WebView2 и просто перейти по новому URL-адресу, а не уничтожать и повторно создавать элемент управления WebView2.
См. также:
Использование памяти и управление процессами
Каждый элемент управления WebView2 создает собственный набор процессов, таких как браузер, отрисовщик и GPU. Использование ресурсов обычно растет по мере создания большего числа экземпляров WebView2, при этом каждый экземпляр выполняет собственный набор процессов браузера.
Экземпляр WebView2 использует память в зависимости от сложности веб-содержимого и процессов, которые он создает в браузере. Выполнение многих экземпляров элемента управления WebView2 может привести к нехватке памяти системы.
Ниже приведены рекомендации по управлению объемом памяти и сокращению объема памяти.
Общий доступ к средам WebView2
Чтобы сохранить память, используйте ее
CoreWebView2Environmentво всех элементах управления WebView2 в приложении, обеспечивая согласованность параметров для общего доступа.Повторно используйте одну и ту же среду в интерфейсах с вкладками вместо создания нескольких сред.
См. также:
Использование общего доступа к процессам на уровне приложения
Если это возможно, используйте общий доступ к процессам на уровне приложения.
Несколько приложений могут совместно использовать процесс браузера с помощью идентичной папки данных пользователя и
CoreWebView2EnvironmentOptions. Это сокращает использование памяти, но требует тщательного управления профилями и тщательного тестирования из-за возможных помех между приложениями.Помните, что при совместном использовании папки пользовательских данных (UDF) базовые данные (такие как файлы cookie, кэши и базы данных) совместно используются различными приложениями.
См. также:
Избегайте крупных область объектов узла
Если вы используете для AddHostObjectToScript предоставления объектов .NET в Интернете, помните о том, что эти объекты хранятся в памяти. На весь объект фактически ссылаются до тех пор, пока контекст скрипта продолжает жить, что может предотвратить сборку мусора этого объекта на стороне .NET.
Не предоставляйте граф очень больших объектов, если для создания скриптов требуется только небольшая часть. Предпочитайте создавать узкие целевые объекты узла вместо передачи полных моделей приложений. Например, вы можете:
Предоставление только операций и данных, которые действительно нужны странице. Например, предоставьте
FileServiceобъект , а не весьAppContextобъект .Обертывание сложных объектов за небольшими фасадами, чтобы избежать непреднамеренного предоставления глубоких иерархий объектов.
Для коллекций предоставьте отфильтрованные или страничные результаты, а не предоставляйте полную структуру данных.
Когда страница, на которую требуется объект, исчезнет, вызовите CoreWebView2.RemoveHostObjectFromScript , чтобы освободить граф объекта. Например, если вы перейдете со страницы, на которую использовался главный объект, удалите этот объект, чтобы избежать сохранения его активности в фоновом режиме.
См. также:
- Общий доступ к объектам узла и веб-сайта в обзоре API WebView2.
Предотвращение утечек памяти
Удалите собственные обработчики событий перед удалением объектов WebView2, чтобы избежать ссылочных циклов и утечек.
Избегайте закрытия, которые строго ссылаются на WebView2; при необходимости используйте слабые ссылки.
Вызовите
WebView2.Dispose(), чтобы освободить объекты WebView2, когда они больше не нужны.
См. также:
- Метод WebView2.Dispose(Boolean) — WPF.
- Метод WebView2.Dispose(Boolean) — WinForms.
- Устранение проблем с памятью
Использование API управления памятью
Установите для
MemoryUsageTargetLevel = CoreWebView2MemoryUsageTargetLevel.Lowнеактивных WebViews, чтобы уменьшить использование памяти. Это может предложить обработчику браузера удалить кэшированные данные или переключить память на диск. Когда экземпляр WebView2 снова активен, восстановите целевой уровень до , чтобыNormalобеспечить полную производительность. См. раздел Целевой объект использования памяти в обзоре API WebView2.Если экземпляр WebView2 некоторое время не будет использоваться, вызовите
CoreWebView2.TrySuspendAsync()для приостановки процесса отрисовщика, что приостанавливает выполнение скриптов и еще больше сокращает использование ресурсов. При необходимости возобновляйте работу сResume(). ЭтиTryоперации являются лучшими. См . раздел Производительность и отладка в обзоре API WebView2.
Оптимизация веб-содержимого
- Оптимизируйте отрисованное веб-содержимое. Проверьте, используется ли чрезмерная память в куче JavaScript. Используйте средства разработки Microsoft Edge, например средство "Память ", для мониторинга использования ресурсов памяти различным веб-содержимым. См. статью Запись моментальных снимков кучи с помощью средства "Память" (тип профилирования "Куча snapshot").
Периодическое обновление WebView2
Периодически обновляйте экземпляр WebView2. В сценариях, где жизненный цикл страницы естественным образом накапливается, например долго выполняющаяся веб-страница, обновление экземпляра WebView2 помогает вернуть процесс WebView2 в чистый базовый план.
Некоторые долго выполняемые страницы могут сохранять ресурсы с течением времени в зависимости от веб-содержимого и структуры приложения. Если использование памяти неожиданно увеличивается, проверьте следующее с помощью средств разработки:
Использование кучи JavaScript. См. следующие статьи:
Прослушиватели событий. См. следующие статьи:
- Проанализируйте отсутствие поддержки клавиатуры с помощью вкладки Прослушиватели событий в разделе Анализ поддержки клавиатуры в формах о вкладке Прослушиватели событий в инструменте Элементы .
- Выберите метрики производительности для мониторинга в разделе Измерение производительности среды выполнения страницы с помощью средства "Монитор производительности" о метрике прослушивателей событий JS .
Хранение DOM. См. следующие статьи:
Производительность ЦП и отрисовки
WebView2 разгружает отрисовку веб-содержимого в обработчик браузера, который использует Edge, поэтому характеристики производительности похожи на запуск сайта в Edge.
Следующие методики обеспечивают эффективное использование ЦП и беспроблемную отрисовку.
Включение аппаратного ускорения
Не отключайте использование GPU WebView2 для отрисовки (с помощью флага
disable-gpu), за исключением случаев устранения неполадок.По умолчанию WebView2 использует GPU для отрисовки. Использование GPU WebView2 имеет решающее значение для производительности. Необходимо выделить драйверы GPU и дополнительные буферы, что требует дополнительной памяти.
См. также
-
Флаги браузера WebView2 -
disable-gpu
Оптимизация веб-содержимого
Оптимизируйте страницы с помощью следующих методов:
Ограничьте тяжелые возможности JavaScript.
Отмена или регулирование задач.
Используйте CSS (а не JavaScript) для анимации.
Разделение длинных скриптов для поддержания реагирования пользовательского интерфейса.
Используйте средства разработки Microsoft Edge для выявления узких мест.
Используйте типичную веб-оптимизацию: избегайте чрезмерного регулирования макета, когда скрипт чередуется между чтением и записью свойств DOM, вызывая несколько перетоков.
См. также:
- Средство повышения производительности. Анализ производительности веб-сайта
- Анализ производительности среды выполнения (руководство)
- Устранение распространенных проблем с производительностью
- Оптимизация скорости веб-сайта с помощью Lighthouse
Сокращение ненужного взаимодействия
Уменьшите ненужный обмен данными между ведущим приложением и веб-содержимым, размещенным в WebView2. Это позволяет избежать чрезмерного взаимодействия между процессами, а также сопутствующих издержек. См . раздел Взаимодействие машинного и веб-кода.
Пакетные сообщения везде, где это возможно, так как частая передача сообщений может увеличить загрузку ЦП.
Управление приоритетом процесса
- Если приложение имеет тяжелую собственную рабочую нагрузку, тщательно назначьте приоритеты потоков, чтобы избежать нехватки потоков WebView2. WebView2 создает отдельные процессы отрисовщика.
См. также:
Тестирование реальных сценариев
- Протестируйте фактическое содержимое на целевом оборудовании, используя Средства разработки Microsoft Edge для поиска и оптимизации проблем с производительностью.
См. также:
Производительность сети и загрузки
Задержка сети и ограниченная пропускная способность могут вызвать проблемы с производительностью, воспринимаемые пользователем, особенно при загрузке веб-содержимого в элементе управления WebView2.
Приведенные ниже рекомендации пересекаются с общей веб-разработкой.
Использование кэширования и служебных рабочих ролей
WebView2 поддерживает кэширование в браузере.
Использование кэширования и служебных рабочих ролей.
Обслуживают правильные заголовки кэша, чтобы повторяющиеся запросы ресурсов использовали кэшированные версии.
Рассмотрите возможность предварительного кэширования статических файлов с помощью рабочей роли службы для автономного доступа; но отслеживайте размер кэша.
См. также:
Проверка узких мест сети
Используйте средство DevTools Network для выявления медленных ресурсов в WebView2; См . раздел Проверка сетевой активности.
По мере необходимости оптимизируйте или асинхронную загрузку скриптов или API сторонних разработчиков.
Уменьшение начальных полезных данных
Чтобы улучшить воспринимаемую скорость, выполните приведенные далее действия.
Оставьте начальный индикатор полезной нагрузки. Предпочитайте отправлять статический HTML-код, так как обычно он загружается, анализируется и отрисовывается быстрее, чем JavaScript. Будьте осторожны при первоначальном использовании JavaScript вместе с одностраничной платформой приложений; такая платформа обычно загружает много кода при запуске, что может отложить первоначальную отрисовку веб-содержимого.
HTML загружается, анализирует и отрисовывается очень быстро — быстрее, чем время, затраченное JavaScript на создание того же пользовательского интерфейса. В некоторых одностраничных платформах JS, даже если исходный HTML-код платформы невелик, весь код платформы должен быть скачан, проанализирован и запущен, прежде чем что-либо можно будет отобразить.
Отложить тяжелые компоненты.
Отложенная загрузка изображений или скриптов после появления начального пользовательского интерфейса.
См. также:
- Исключите ресурсы, блокирующие отрисовку , в статье Оптимизация скорости веб-сайта с помощью Lighthouse.
Обмен данными между элементом управления WebView2 и ведущим приложением
Выберите правильный канал коммуникации
WebView2 предоставляет различные варианты обмена данными между узлами и узлами.
Попробуйте использовать веб-сообщения, а не размещайте объекты. Веб-сообщения, как правило, быстрее, чем объекты узла, из-за использования памяти и времени, из-за простоты и надежности веб-сообщений.
Используйте объекты узла только в том случае, если вам нужны возможности, которые веб-сообщения не могут легко выразить, например:
Многофункциональные, похожие на объекты API (методы, свойства, события), которые необходимо предоставить непосредственно в JavaScript.
Взаимодействие с отслеживанием состояния, в котором поддержание контекста на стороне узла проще, чем передача структурированных сообщений туда и обратно.
Большие или двоичные потоки данных, в которых многократное сериализация полезных данных строк в веб-сообщения становится неэффективным.
Объекты узла имеют следующие недостатки:
Для ведущих объектов требуется маршалирование COM, что может привести к нестабильности, если граф объектов изменяется или не маршалируется правильно.
Объекты узла обычно медленнее для болтливых, частых вызовов по сравнению с одним пакетным
WebMessage, так как каждый метод или доступ к свойству пересекает границу по отдельности.Объекты узла создают более тесную связь между веб-кодом и кодом узла, что снижает переносимость.
См. также:
Оптимизация взаимодействия
Реализуйте асинхронное пакетное взаимодействие, чтобы свести к минимуму обмен данными IPC и сократить копирование данных.
См. также:
- Взаимодействие web/native в обзоре API WebView2.
- Взаимодействие собственного и веб-кода
Средства телеметрии и профилирования
Сбор данных является ключом к выявлению и устранению проблем с производительностью.
Ниже приведены средства и методы телеметрии для WebView2.
Трассировка WebView2 ETW
Используйте профиль Майкрософт WebView2.wprp (сбор трассировки трассировки трассировки windows) с помощью средства записи производительности Windows для сбора и анализа подробных событий WebView2, таких как запуски процессов и время навигации.
Вы можете записывать события поставщика Edge/WebView2 с помощью трассировки событий Для Windows (ETW); См. раздел Сбор трассировки трасс
Анализ трассировок в Windows Анализатор производительности для данных ЦП, диска и памяти.
Средства разработки Microsoft Edge
Используйте средства разработки Microsoft Edge для мониторинга содержимого и процессов WebView2 для выявления проблем, таких как высокая утечка ЦП или памяти.
Щелкните правой кнопкой мыши элемент управления WebView2 в приложении WebView2 и выберите пункт Проверить. Например, щелкните правой кнопкой мыши основное приложение Win32 и выберите пункт Проверить. DevTools откроется в отстыковке выделенного окна браузера.
В средствах разработки можно использовать такие средства, как средство "Память " и " Производительность ".
См. также:
- Отладка приложений WebView2 с помощью средств разработки Microsoft Edge
- Средство повышения производительности. Анализ производительности веб-сайта
- Устранение проблем с памятью — средство "Память ".
Проверка с помощью средств разработчика Edge
Используйте edge://inspect, открыв вкладку Проверка с помощью инструментов разработчика Edge , чтобы отслеживать содержимое и процессы WebView2, чтобы выявить такие проблемы, как высокая утечка ЦП или памяти.
Дополнительные сведения о проверке процесса WebView2 с помощью см. в edge://inspectстатье Удаленная отладка классических приложений WebView2 WinUI 2 (UWP).
Диспетчер задач браузера
Используйте диспетчер задач браузера для мониторинга содержимого и процессов WebView2 для выявления проблем, таких как высокая утечка ЦП или памяти.
См. раздел Мониторинг использования памяти в режиме реального времени (диспетчер задач браузера).
Устранение неполадок рабочих процессов при проблемах с производительностью
При возникновении проблем с производительностью в приложении WebView2 используйте структурированный подход для устранения неполадок в соответствии со следующими стратегиями.
Тестирование с простым содержимым
Загрузите минимальную HTML-страницу.
Если производительность по-прежнему низкая с простым содержимым, изучите инициализацию среды выполнения или факторы ведущего приложения.
Если производительность при использовании простого содержимого выше, сосредоточьтесь на оптимизации веб-содержимого.
См. также:
Проверка версии среды выполнения WebView2
Убедитесь, что вы используете последнюю версию среды выполнения WebView2, а не устаревшую версию или резервную установку Edge. При необходимости обновите среду выполнения WebView2.
См. также:
- Обновление среды выполнения WebView2 в разделе Настройка среды разработки для WebView2.
- Распространение приложения и среды выполнения WebView2
Мониторинг использования памяти
Используйте диспетчер задач Windows для проверка памяти процессов WebView2.
Необычный рост может указывать на утечку — используйте записи WPR для дальнейшей отладки.
См. также:
Сравнение WebView2 с Microsoft Edge
WebView2 использует тот же основной браузер, что и Microsoft Edge. Проверьте ситуацию с помощью Microsoft Edge, а также WebView2, чтобы изолировать проблему.