包含此页的版本:
不含此页的版本:
WebAssembly 2023 目标包含的功能可以提高代码性能、减小生成的代码大小并减少在所有受支持的浏览器和平台上的 Web 版本的下载时间。
如果启用 WebAssembly 2023 目标,它会自动启用以下所有优化功能:
| 部分 | 描述 |
|---|---|
| WebAssembly 本机异常 | 异常处理的开销比基于 JavaScript 的异常少。 |
| 支持 WebAssembly 单指令多数据 (SIMD) | 提高执行大量数学计算或复杂顶点作的应用程序的性能。 |
| 优化数据作 | 对于大量数据作很有用。 |
| 支持 BigInt | 改进了 WebAssembly 和 JavaScript 代码之间的数据交换。 |
| WebAssembly.表 | 改进了 WebAssembly 和 JavaScript 之间的互作性。 |
| 加快数据类型转换速度 | 减小代码大小并略微提高性能。 |
您的浏览器需要支持这些功能才能正常工作。要检查支持的浏览器,请参阅 WebAssembly 2023 的先决条件。
要了解如何启用 WebAssembly 2023,请参阅启用 WebAssembly 2023。
在原始的 WebAssembly MVP 中功能集 功能集是相关包的集合,可用于在 Unity 编辑器中实现特定结果。您可以直接在 Unity 的包管理器中管理功能集。更多信息
请参阅术语表,异常处理依赖于 JavaScript 异常机制。这种形式的异常处理导致了相对较高的开销。从那时起,WebAssembly 开发了自己的本机异常处理支持,以减少开销问题。
如果启用 WebAssembly 2023,它会自动启用 WebAssembly 本机异常语言功能。这些原生异常可以提高运行时性能并减少.wasm代码大小。
WebAssembly SIMD 功能使 Unity 能够使用浏览器提供的 SIMD 指令支持。在内部,浏览器面向 x86 intel 和 ARM 架构中的 SIMD 指令集。因此,此功能适用于支持的桌面和移动浏览器。有关支持的浏览器列表,请参阅 WebAssembly 2023 的先决条件。
WebAssembly SIMD 支持包括自动矢量化支持。如果在代码中的短循环中进行标量算术计算,则自动矢量化会自动将其转换为 WebAssembly SIMD 数据并行形式。在这种形式中,代码可以执行得更快,因为许多计算是同时处理的。
如果具有执行繁重矩阵数学的运算(例如 character蒙皮(skinning) 将骨骼关节绑定到角色网格体或“皮肤”顶点的过程。使用外部工具(如Blender或Autodesk Maya)执行。更多信息
请参阅术语表或动画关键帧标记动画中过渡的起点或终点的帧。关键帧之间的帧称为中间帧。
请参阅术语表和转换计算。
如果您的应用程序执行大量数学计算或复杂的向量作,则此功能可以显着提高运行时性能。
WebAssembly 2023 支持更好地生成代码memcpy和memset功能。当代码复制或设置大量数据时,这种改进的代码生成会带来更好的性能。
WebAssembly 2023 启用了WebAssembly.BigInt语言功能。您可以使用WebAssembly.BigInt以在 JavaScript 和 WebAssembly 代码之间交换数据时访问 JavaScript BigInt 数据类型。然后,您可以使用 BigInt 数据类型在 JavaScript 和 WebAssembly 代码之间本机发送和接收 64 位整数,而无需将 64 位整数拆分为 32 位数字的高阶和低阶 (HI/LO) 对。
这种改进的通信导致两个接口之间更好的封送边界,从而提高封送处理性能并生成更小的代码。
您还可以启用WebAssembly.BigInt支持没有其他 WebAssembly 2023 功能。有关该功能以及如何单独启用它的更多信息,请参阅 WebAssembly 语言功能。
注意:如果您已经在 JS 和 WebAssembly 语言边界之间使用使用 64 位整数的封送代码,请将您的代码调整为使用 JS BigInt 功能的更新的 64 位封送模式。
例如,如果您有一个这样的整数:
const number = 12345678901234567;
像这样将其转换为 BigInt:
const bigInt = BigInt(number);
有关更多信息,请参阅 Emscripten 文档。
Unity WebAssembly 2023 功能集使 Unity Emscripten 工具链能够以WebAssembly.Table语言功能。每当您通过指针调用函数时,此功能都会简化代码生成。此外,由于 Emscripten 编译器在编译过程中需要的传递次数更少,因此编译时间更快。
要通过指针调用函数,请使用{{{ makeDynCall }}}宏。
有关 JavaScript 对象的更多信息,请参阅 WebAssembly.Table 上的 Mozilla 文档。
您还可以启用WebAssembly.Table支持播放器设置中没有其他 WebAssembly 2023 功能。有关该功能以及如何单独启用它的更多信息,请参阅 WebAssembly 语言功能。
注意:Emscripten 函数dynCall_*()和Module.dynCall()已弃用。如果您的 JavaScript 插件代码使用这些函数,请使用 Emscripten{{{ makeDynCall() }}}宏。
如果启用 WebAssembly 2023,Unity 会使用较短的低级指令序列实现以下转换:
float 转换为 int
double 到 int
这些转换减小了代码大小并略微提高了运行时性能。