Примечание
Это не последняя версия этой статьи. В текущем выпуске см. версию .NET 9 этой статьи.
Предупреждение
Эта версия ASP.NET Core больше не поддерживается. Дополнительные сведения см. в политике поддержки .NET и .NET Core. В текущем выпуске смотрите версию .NET 9 этой статьи.
Важно!
Эта информация относится к предварительному выпуску продукта, который может быть существенно изменен до его коммерческого выпуска. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
В текущем выпуске см. эту версию .NET 9 этой статьи.
В этой статье описываются средства сборки для автономных Blazor WebAssembly приложений и компиляция приложения перед развертыванием с помощью предварительной компиляции (AOT).
Хотя в статье основное внимание уделяется автономным Blazor WebAssembly приложениям, раздел о размере кучи для некоторых браузеров мобильных устройств также относится к клиентскому проекту (.Client
) объекта Blazor Web App.
Средства компиляции .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
Компиляция "Ahead-of-time" (AOT)
Blazor WebAssembly поддерживает упреждающую компиляцию (AOT), с помощью которой вы можете скомпилировать код .NET непосредственно в WebAssembly. Компиляция AOT позволяет повысить производительность среды выполнения за счет увеличения размера приложения.
Без 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 для выполнения браузером в среде 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 (IL).
dotnet publish -c Release
Компиляция WebAssembly AOT выполняется только при публикации проекта. Компиляция AOT не используется, когда проект запускается в среде разработки (Development
), поскольку компиляция небольших проектов обычно занимает несколько минут, а для больших проектов может занимать значительно больше времени. Сокращение времени сборки для компиляции 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.
Обрезать .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, может потребоваться уменьшение максимального объема памяти для приложения с помощью свойства MSBuild EmccMaximumHeapSize
. Дополнительные сведения см. в статье Размещение и развертывание 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.
Одна инструкция, несколько данных (SIMD)
Blazor использует одну инструкцию WebAssembly, несколько данных (SIMD) для повышения пропускной способности векторных вычислений путем параллельного выполнения операции с несколькими частями данных с помощью одной инструкции.
Чтобы отключить SIMD, например, при нацеливании на старые браузеры или браузеры на мобильных устройствах, которые не поддерживают SIMD, установите для свойства <WasmEnableSIMD>
значение false
в файле проекта приложения (.csproj
):
<PropertyGroup>
<WasmEnableSIMD>false</WasmEnableSIMD>
</PropertyGroup>
Для получения дополнительной информации см. настройку и размещение приложений .NET WebAssembly: SIMD — один оператор, множество данных и обратите внимание, что рекомендации не имеют привязки к версиям и применяются к последнему общедоступному выпуску.
Обработка исключений включена по умолчанию. Чтобы отключить обработку исключений, добавьте <WasmEnableExceptionHandling>
свойство со значением false
в файле проекта приложения (.csproj
):
<PropertyGroup>
<WasmEnableExceptionHandling>false</WasmEnableExceptionHandling>
</PropertyGroup>
Чтобы включить обработку исключений WebAssembly, в файле проекта приложения (.csproj
) добавьте свойство <WasmEnableExceptionHandling>
со значением true
.
<PropertyGroup>
<WasmEnableExceptionHandling>true</WasmEnableExceptionHandling>
</PropertyGroup>
Дополнительные сведения см. на следующих ресурсах: