Version: Unity 6.0 (6000.0)
언어 : 한국어
WebAssembly 2023의 선행 조건
WebAssembly 2023 활성화

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 명령어 지원을 사용할 수 있습니다. 내부적으로 브라우저는 x86 intel 및 ARM 아키텍처의 SIMD 명령어 세트를 타게팅합니다. 따라서 이 기능은 지원되는 데스크톱 및 모바일 브라우저에서 모두 작동합니다. 지원되는 브라우저 목록은 WebAssembly 2023의 선행 조건을 참조하십시오.

WebAssembly SIMD 지원에는 자동 벡터화 지원이 포함되어 있습니다. 코드에서 짧은 루프에 스칼라 연산이 있는 경우 자동 벡터화는 이를 WebAssembly SIMD 데이터 병렬 형식으로 자동으로 전환합니다. 이 형식에서는 많은 계산이 동시에 처리되므로 코드가 더 빠르게 작동할 수 있습니다.

캐릭터 스키닝이나 애니메이션 키프레임 및 트랜스폼 계산과 같은 고부하의 매트릭스 수학을 수행하는 작업을 수행하는 경우 WebAssembly SIMD 기능이 크게 달라질 수 있습니다.

애플리케이션이 많은 수학 계산이나 복잡한 벡터 조작을 수행하는 경우 이 기능을 사용하면 런타임 성능이 크게 향상될 수 있습니다.

최적화된 데이터 작업

WebAssembly 2023를 사용하면 memcpymemset 함수의 코드 생성이 개선됩니다. 코드 생성이 개선되면 코드가 많은 양의 데이터를 복사하거나 설정할 때 성능이 향상됩니다.

BigInt 지원

WebAssembly 2023는 WebAssembly.BigInt 언어 기능을 활성화합니다. JavaScript와 WebAssembly 코드 간에 데이터를 교환할 때 WebAssembly.BigInt를 사용하여 JavaScript BigInt 데이터 유형에 액세스할 수 있습니다. 그런 다음 BigInt 데이터 유형을 사용하여 64비트 정수를 32비트 숫자의 HI/LO(상위 및 하위) 쌍으로 분할하지 않고도 64비트 정수를 기본적으로 JavaScript 및 WebAssembly 코드 간에 전송하고 수신할 수 있습니다.

커뮤니케이션이 개선되면 두 인터페이스 간의 마셜링 경계가 향상되어 마셜링 성능이 향상되고 코드 크기가 작아집니다.

다른 WebAssembly 2023 기능 없이도 WebAssembly.BigInt 지원을 활성화할 수 있습니다. 기능과 별도로 활성화하는 방법에 대한 자세한 내용은 WebAssembly 언어 기능을 참조하십시오.

참고: 64비트 정수를 사용하는 JS 및 WebAssembly 언어 경계 사이에 이미 마셜링 코드가 있는 경우 JS BigInt 기능을 사용하는 업데이트된 64비트 마셜링 모드로 코드를 조정하십시오.

예를 들어 다음과 같은 정수가 있는 경우

const number = 12345678901234567;

다음과 같이 BigInt로 전환합니다.

const bigInt = BigInt(number);

자세한 내용은 Emscripten 기술 자료를 참조하십시오.

WebAssembly.Table 언어 기능

Unity WebAssembly 2023 기능 세트를 사용하면 Unity Emscripten 툴체인이 WebAssembly.Table 언어 기능을 타게팅할 수 있습니다. 이 기능은 포인터를 통해 함수를 호출할 때마다 코드 생성을 간소화합니다. 또한 Emscripten 컴파일러가 컴파일 중에 패스를 더 적게 요구하므로 컴파일 시간이 단축됩니다.

포인터를 통해 함수를 호출하려면 {{{ makeDynCall }}} 매크로를 사용합니다.

JavaScript 객체에 대한 자세한 내용은 WebAssembly.Table에 대한 Mozilla 기술 자료를 참조하십시오.

플레이어 설정에서 다른 WebAssembly 2023 기능 없이도 WebAssembly.Table 지원을 활성화할 수 있습니다. 기능과 별도로 활성화하는 방법에 대한 자세한 내용은 WebAssembly 언어 기능을 참조하십시오.

참고: Emscripten 함수 dynCall_*()Module.dynCall()은 지원이 중단되었습니다. JavaScript 플러그인 코드가 이러한 기능을 사용하는 경우 대신 Emscripten {{{ makeDynCall() }}} 매크로를 사용하십시오.

코드에서 데이터 유형 전환 가속화

WebAssembly 2023를 활성화하면 Unity는 더 짧은 저수준 명령어 시퀀스를 사용하여 다음과 같은 전환을 구현합니다.

  • float에서 int로 전환

  • double에서 int로 전환

이러한 전환 작업을 통해 코드 크기를 줄이고 런타임 성능을 약간 개선할 수 있습니다.

추가 리소스

WebAssembly 2023의 선행 조건
WebAssembly 2023 활성화