Unity 6.3
0 онлайн 77 гостей 3 в системе
Вход

Оптимизация веб-сайта с WebAssembly 2023

В WebAssembly 2023 содержатся функции, которые могут повысить производительность кода, уменьшить размер генерируемого кода и сократить время загрузки веб-сборки на всех поддерживаемых браузерах и платформах.

Если вы включите цель WebAssembly 2023, она автоматически включит все следующие функции оптимизации:

Секция Описание
WebAssembly основные исключения Обработка исключений с меньшими накладными расходами, чем исключения, основанные на JavaScript.
Поддержка WebAssembly одной инструкции множественных данных (SIMD) Улучшает производительность приложений, которые выполняют множество математических расчетов или сложные манипуляции вершинами.
Оптимизированная обработка данных Полезно для обработки больших объемов данных.
Поддержка BigInt Улучшает обмен данными между WebAssembly и JavaScript кодом.
WebAssembly.Table Улучшает совместимость между WebAssembly и JavaScript.
Ускорение преобразования типов данных Уменьшает размер кода и немного повышает производительность.

Ваш браузер должен поддерживать эти функции, чтобы они работали правильно. Чтобы проверить поддерживаемые браузеры, см. предпосылки для WebAssembly 2023.

Чтобы узнать, как включить WebAssembly 2023, см. Включение WebAssembly 2023.

WebAssembly основные исключения

В оригинале WebAssembly MVP набор функций, обработка исключений JavaScript Эта форма обработки исключений привела к относительно высоким накладным расходам. С тех пор, WebAssembly разработала собственную поддержку обработки исключений, которая снижает накладные расходы.

Если вы включите WebAssembly 2023, это автоматически включает функцию языка WebAssembly собственных исключений. Эти собственные исключения могут улучшить производительность во время выполнения и уменьшить размер кода .wasm.

Поддержка WebAssembly одной инструкции множественных данных (SIMD)

Функция WebAssembly SIMD позволяет Unity использовать поддержку SIMD-инструкций, предоставляемую браузером. Внутренне браузер ориентируется на наборы SIMD-инструкций архитектур x86 Intel и ARM. Поэтому эта функция работает во всех поддерживаемых настольных и мобильных браузерах. Список поддерживаемых браузеров см. в разделе Предварительные требования для WebAssembly 2023.

Поддержка WebAssembly SIMD включает поддержку автоматической векторизации. Если в вашем коде есть скалярные арифметические вычисления в коротких циклах, автовекторизация автоматически преобразует их в параллельную форму данных WebAssembly SIMD. В этой форме код может выполняться быстрее, потому что многие вычисления обрабатываются одновременно.

Функция WebAssembly SIMD может существенно изменить ситуацию, если у вас есть операции, которые выполняют сложные матричные математические операции, такие как скининг персонажей или вычисления ключевых кадров анимации и преобразования.

Если ваше приложение выполняет много математических расчетов или сложных манипуляций с векторами, эта функция может значительно улучшить производительность во время выполнения.

Оптимизированная обработка данных

WebAssembly 2023 позволяет лучше генерировать код функций memcpy и memset. Это улучшенное генерирование кода приводит к повышению производительности, когда ваш код копирует или устанавливает большие объемы данных.

Поддержка BigInt

WebAssembly 2023 включает функцию языка WebAssembly.BigInt. Вы можете использовать WebAssembly.BigInt для доступа к типу данных JavaScript BigInt при обмене данными между кодом JavaScript и WebAssembly. Затем вы можете использовать тип данных BigInt для отправки и получения 64-битных целых чисел между кодом JavaScript и WebAssembly без необходимости разделения 64-битных целых чисел на пары 32-битных чисел высокого и низкого порядка (HI/LO).

Это улучшение связи приводит к лучшей границе маршрутизации между двумя интерфейсами, что повышает производительность маршрутизации и также генерирует меньший код.

Вы также можете включить поддержку WebAssembly.BigInt без поддержки других возможностей WebAssembly 2023. Дополнительные сведения об этой возможности и о том, как включить ее отдельно, см. в WebAssembly языковые возможности.

Примечание : Если у вас уже есть марширующий код между JS и WebAssembly границы языка которые используют 64-разрядные целые числа, регулируют ваш код к обновленному 64-разрядному режиму маршрутирования который использует JS BigInt особенность.

Например, если у вас есть целое число, например:

const number = 12345678901234567;

Преобразуйте его в BigInt следующим образом:

const bigInt = BigInt(number);

Дополнительные сведения см. в документации Emscripten.

Функция языка WebAssembly.Table

Набор функций Unity WebAssembly 2023 позволяет Unity Emscripten toolchain нацеливать на функцию языка WebAssembly.Table. Эта функция упрощает генерацию кода при вызове функций через указатели. Кроме того, поскольку компилятор Emscripten требует меньше проходов во время компиляции, время компиляции уменьшается.

Для вызова функций через указатели используйте макрос {{{ makeDynCall }}}.

Дополнительные сведения об объекте JavaScript см. в документации Mozilla по WebAssembly.Table.

Вы также можете включить поддержку WebAssembly.Table без поддержки других WebAssembly 2023 функций в настройках Игрок. Более подробную информацию о функции и о том, как включить ее отдельно, см. в Возможности языка WebAssembly.

Примечание: Emscripten функции dynCall_*() и Module.dynCall() Если у вас есть JavaScript код плагина использует эти функции, используйте Emscripten {{{ makeDynCall() }}} макро вместо.

Ускорение преобразования типов данных в коде

Если вы включите WebAssembly 2023, Unity реализует следующие преобразования с более короткой низкоуровневой последовательностью инструкций:

  • float в int

  • двойной в int

Эти преобразования уменьшают размер кода и немного повышают производительность во время выполнения.

Дополнительные ресурсы