SIMD improves the performance of WebAssembly, but Safari and the Enhanced Security Mode of Microsoft Edge do not support it. As a result, we build 2 Wasm versions (one with SIMD and one without) in our project and utilize WebAssembly Feature Detection to load appropriate version at runtime:
const { dotnet } = await import(`./${await simd() ? "simd" : "no-simd"}/dotnet.js`);
With the following configurations in the csproj file,
<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<Nullable>enable</Nullable>
<RuntimeIdentifier>browser-wasm</RuntimeIdentifier>
<WasmMainJSPath>main.js</WasmMainJSPath>
<OutputType>Exe</OutputType>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<WasmEnableThreads>true</WasmEnableThreads>
<RunAOTCompilation>true</RunAOTCompilation>
<WasmEnableExceptionHandling>true</WasmEnableExceptionHandling>
<EnableMLUnsupportedPlatformTargetCheck>false</EnableMLUnsupportedPlatformTargetCheck>
<InvariantGlobalization>true</InvariantGlobalization>
</PropertyGroup>
<Choose>
<When Condition="'$(Configuration)' != 'NoSIMD'">
<PropertyGroup>
<WasmEnableSIMD>true</WasmEnableSIMD>
</PropertyGroup>
</When>
</Choose>
The build script runs dotnet publish twice:
dotnet publish -c Release
dotnet publish -c NoSIMD --no-restore
As the project is effectively built twice, the build process takes quite some time. I hope something can be done to improve the build performance.
SIMD improves the performance of WebAssembly, but Safari and the Enhanced Security Mode of Microsoft Edge do not support it. As a result, we build 2 Wasm versions (one with SIMD and one without) in our project and utilize
WebAssembly Feature Detectionto load appropriate version at runtime:With the following configurations in the
csprojfile,The build script runs
dotnet publishtwice:As the project is effectively built twice, the build process takes quite some time. I hope something can be done to improve the build performance.