ASP.NET средства сборки Core Blazor WebAssembly и компиляция накануне (AOT)
Примечание.
Это не последняя версия этой статьи. В текущем выпуске см . версию .NET 9 этой статьи.
Предупреждение
Эта версия ASP.NET Core больше не поддерживается. Дополнительные сведения см. в статье о политике поддержки .NET и .NET Core. В текущем выпуске см . версию .NET 8 этой статьи.
Внимание
Эта информация относится к предварительному выпуску продукта, который может быть существенно изменен до его коммерческого выпуска. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
В текущем выпуске см . версию .NET 9 этой статьи.
В этой статье описываются средства сборки для автономных Blazor WebAssembly приложений и компиляция приложения перед развертыванием с помощью предварительной компиляции (AOT).
Хотя в статье основное внимание уделяется автономным Blazor WebAssembly приложениям, раздел о размере кучи для некоторых браузеров мобильных устройств также относится к клиентскому проекту (.Client
) объекта Blazor Web App.
Средства сборки WebAssembly .NET
Средства компиляции .NET WebAssembly основаны на цепочке инструментов Emscripten для веб-платформы. Чтобы установить средства сборки, используйте любой из следующих подходов:
- Для рабочей нагрузки ASP.NET и веб-разработки в установщике Visual Studio выберите параметр средства сборки .NET WebAssembly в списке дополнительных компонентов.
- Выполнение
dotnet workload install wasm-tools
в командной оболочке администрирования.
Примечание.
Средства сборки .NET WebAssembly для проектов .NET 6
wasm-tools
Рабочая нагрузка устанавливает средства сборки для последнего выпуска. Однако текущая версия средств сборки несовместима с существующими проектами, созданными с помощью .NET 6. Проекты, использующие средства сборки, которые должны поддерживать .NET 6 и более поздний выпуск, должны использовать многоцелевой.
Используйте рабочую нагрузку wasm-tools-net6
для проектов .NET 6 при разработке приложений с помощью пакета SDK для .NET 7. Чтобы установить wasm-tools-net6
рабочую нагрузку, выполните следующую команду из командной оболочки администрирования:
dotnet workload install wasm-tools-net6
Компиляция AOT
Blazor WebAssembly поддерживает упреждающую компиляцию (AOT), с помощью которой вы можете скомпилировать код .NET непосредственно в WebAssembly. Компиляция AOT позволяет повысить производительность среды выполнения за счет увеличения размера приложения.
Без включения компиляции Blazor WebAssembly AOT приложения выполняются в браузере с помощью интерпретатора промежуточного языка .NET (IL ), реализованного в WebAssembly с частичной поддержкой JIT-среды выполнения, неофициально называемой Jiterpreter. Так как код .NET IL интерпретируется, приложения обычно выполняются медленнее, чем они будут выполняться на стороне сервера среды выполнения JIT на стороне сервера без какой-либо интерпретации IL. Компиляция AOT позволяет решить эту проблему с производительностью, выполняя компиляцию кода .NET приложения непосредственно в WebAssembly для выполнения собственной сборки через браузер. Повышение производительности AOT может привести к значительному улучшению приложений, выполняющих ресурсоемкие задачи. Недостаток использования компиляции AOT заключается в том, что приложения, скомпилированные с помощью AOT, обычно больше их аналогов, интерпретируемых с помощью IL, поэтому загрузка клиента при первом запросе обычно занимает больше времени.
Без включения компиляции Blazor WebAssembly AOT приложения выполняются в браузере с помощью интерпретатора промежуточного языка .NET (IL), реализованного в WebAssembly. Поскольку код .NET интерпретируется, приложения обычно выполняются медленнее, чем на стороне сервера среды выполнения JIT .NET. Компиляция AOT позволяет решить эту проблему с производительностью, выполняя компиляцию кода .NET приложения непосредственно в WebAssembly для выполнения собственной сборки через браузер. Повышение производительности AOT может привести к значительному улучшению приложений, выполняющих ресурсоемкие задачи. Недостаток использования компиляции AOT заключается в том, что приложения, скомпилированные с помощью AOT, обычно больше их аналогов, интерпретируемых с помощью IL, поэтому загрузка клиента при первом запросе обычно занимает больше времени.
Инструкции по установке средств сборки .NET WebAssembly см. в статье ASP.NET Средства сборки Core Blazor WebAssembly и компиляция с предварительной компиляцией (AOT).
Чтобы включить компиляцию AOT WebAssembly, добавьте свойство <RunAOTCompilation>
, которому присвоено значение true
, в файл проекта приложения Blazor WebAssembly:
<PropertyGroup>
<RunAOTCompilation>true</RunAOTCompilation>
</PropertyGroup>
Чтобы скомпилировать приложение в WebAssembly, опубликуйте приложение. Публикация конфигурации Release
гарантирует, что для уменьшения размера опубликованного приложения также выполняется компоновка на промежуточном языке .NET.
dotnet publish -c Release
Компиляция AOT WebAssembly выполняется только при публикации проекта. Компиляция AOT не используется, когда проект запускается во время разработки (среда Development
), поскольку компиляция AOT небольших проектов обычно занимает несколько минут и может значительно увеличиться для больших проектов. Сокращение времени сборки для компиляции AOT планируется в будущих выпусках ASP.NET Core.
Размер приложения Blazor WebAssembly, скомпилированного в режиме AOT, обычно превышает размер приложения, скомпилированного в IL .NET.
Несмотря на то, что разница в размере зависит от приложения, большинство приложений, скомпилированных в режиме AOT, вдвое больше их версий, скомпилированных с помощью IL. Это означает, что при использовании компиляции AOT время загрузки больше, но скорость выполнения выше. Применение такого компромисса в отношении компиляции AOT зависит от приложения. Обычно преимущества компиляции AOT ощутимы для приложений Blazor WebAssembly, которые потребляют много ресурсов ЦП.
Больший размер приложения, скомпилированного в режиме AOT, обусловлен двумя условиями:
- Требуется больше кода для представления высокоуровневых инструкций IL .NET в собственном формате WebAssembly.
- AOT не обрезает управляемые библиотеки DLL при публикации приложения. Blazor требует библиотек DLL для метаданных отражения и для поддержки некоторых функций среды выполнения .NET. Требование использовать библиотеки DLL в клиенте увеличивает размер скачиваемых ресурсов, но обеспечивает более совместимый интерфейс .NET.
Примечание.
Сведения о свойствах и целевых объектах MSBuild Mono/WebAssembly см. в разделе WasmApp.Common.targets
(dotnet/runtime
репозиторий GitHub). Официальная документация по общим свойствам MSBuild планируется на параметры конфигурации Document blazor msbuild (dotnet/docs
#27395).
Обрезать .NET IL после предварительной компиляции (AOT)
Параметр WasmStripILAfterAOT
MSBuild позволяет удалить промежуточный язык .NET (IL) для скомпилированных методов после выполнения компиляции AOT в WebAssembly, что снижает размер _framework
папки.
В файле проекта приложения сделайте следующее:
<PropertyGroup>
<RunAOTCompilation>true</RunAOTCompilation>
<WasmStripILAfterAOT>true</WasmStripILAfterAOT>
</PropertyGroup>
Этот параметр обрезает код IL для большинства скомпилированных методов, включая методы из библиотек и методов в приложении. Не все скомпилированные методы можно обрезать, так как некоторые из них по-прежнему требуются интерпретатором .NET во время выполнения.
Чтобы сообщить о проблеме с параметром обрезки, откройте проблему в dotnet/runtime
репозитории GitHub.
Отключите свойство обрезки, если оно не позволяет приложению работать нормально:
<WasmStripILAfterAOT>false</WasmStripILAfterAOT>
Размер кучи для некоторых браузеров мобильных устройств
При создании приложения, работающего Blazor на клиенте и предназначенных для браузеров мобильных устройств, особенно Safari в iOS, может потребоваться максимальное количество памяти для приложения со свойством EmccMaximumHeapSize
MSBuild. Дополнительные сведения см. в статье Размещение и развертывание ASP.NET Core Blazor WebAssembly.
Повторная компоновка среды выполнения
Одна из самых крупных частей приложения Blazor WebAssembly — это среда выполнения .NET на основе WebAssembly (dotnet.wasm
), которую браузер должен загрузить при первом обращении к приложению через браузер пользователя. Повторная компоновка среды выполнения .NET WebAssembly обрезает неиспользуемый код среды выполнения и тем самым повышает скорость загрузки.
Повторная компоновка среды выполнения требует установки средств сборки .NET WebAssembly. Дополнительные сведения см. в статье Инструментарий для ASP.NET Core Blazor.
При наличии установленных средств сборки .NET WebAssembly повторная компоновка среды выполнения выполняется автоматически, когда приложение публикуется в конфигурации Release
. Уменьшение размера особенно существенно при отключении глобализации. Дополнительные сведения см. в статье Глобализация и локализация в ASP.NET Core Blazor.
Внимание
При повторном связывании среды выполнения методы JavaScript, вызываемые JavaScript, выполняются повторно, если они не защищены. Дополнительные сведения см. в статье Вызов методов .NET из функций JavaScript в ASP.NET Core Blazor.
Одна инструкция, несколько данных (SIMD)
Blazor использует одну инструкцию WebAssembly, несколько данных (SIMD) для повышения пропускной способности векторных вычислений путем параллельного выполнения операции с несколькими частями данных с помощью одной инструкции.
Чтобы отключить SIMD, например при выборе старых браузеров или браузеров на мобильных устройствах, которые не поддерживают SIMD, задайте <WasmEnableSIMD>
для свойства значение false
в файле проекта приложения (.csproj
):
<PropertyGroup>
<WasmEnableSIMD>false</WasmEnableSIMD>
</PropertyGroup>
Дополнительные сведения см. в статье о настройке и размещении приложений .NET WebAssembly: SIMD — одна инструкция, несколько данных и обратите внимание, что рекомендации не версии и применяются к последнему общедоступному выпуску.
Blazor использует одну инструкцию WebAssembly, несколько данных (SIMD) для повышения пропускной способности векторных вычислений путем параллельного выполнения операции с несколькими частями данных с помощью одной инструкции.
Чтобы включить SIMD, добавьте <WasmEnableSIMD>
свойство, заданное true
в файле проекта приложения (.csproj
):
<PropertyGroup>
<WasmEnableSIMD>true</WasmEnableSIMD>
</PropertyGroup>
Дополнительные сведения см. в статье о настройке и размещении приложений .NET WebAssembly: SIMD — одна инструкция, несколько данных и обратите внимание, что рекомендации не версии и применяются к последнему общедоступному выпуску.
Обработка исключений
Обработка исключений включена по умолчанию. Чтобы отключить обработку исключений, добавьте <WasmEnableExceptionHandling>
свойство со значением false
в файле проекта приложения (.csproj
):
<PropertyGroup>
<WasmEnableExceptionHandling>false</WasmEnableExceptionHandling>
</PropertyGroup>
Чтобы включить обработку исключений WebAssembly, добавьте <WasmEnableExceptionHandling>
свойство со значением true
в файле проекта приложения (.csproj
):
<PropertyGroup>
<WasmEnableExceptionHandling>true</WasmEnableExceptionHandling>
</PropertyGroup>
Дополнительные сведения см. на следующих ресурсах:
Дополнительные ресурсы
ASP.NET Core