# 웹 성능 고려 사항

> Web performance considerations.

일반적으로 WebGL 그래픽스 API는 하드웨어 가속 렌더링에 GPU를 사용하므로 웹 성능은 GPU의 네이티브 앱과 비슷합니다. 유일한 예외는 WebGL API 호출과 셰이더를 OS 그래픽스 API(일반적으로 Windows에서는 DirectX, Mac 및 Linux에서는 OpenGL)로 변환하는 데 약간의 부하가 발생하는 것입니다.

CPU에서 Emscripten은 코드를 WebAssembly로 변환하며 해당 성능은 사용 중인 웹 브라우저에 따라 다릅니다.

다음 사항에 유의하십시오.

* Unity는 C/C++ 코드에 멀티스레딩을 제공하지만, WebAssembly의 제한 사항으로 인해 C# 코드에는 아직 제공하지 않습니다.
* 렌더링에 WebGL API를 사용하는 경우 WebGL 작업의 CPU 측 디스패치 속도가 네이티브 OpenGL보다 느립니다. 따라서 최상의 성능을 위해 권장되는 베스트 프랙티스는 프레임당 드로우 콜이 많지 않도록 하는 것입니다. 따라서 셰이더에서 인스턴싱과 배칭 기법을 모두 사용해야 합니다.
* 웹의 SIMD는 WebAssembly 2023 기능 집합의 일환으로 지원됩니다. 최신 브라우저에서 최상의 성능을 얻으려면 WebAssembly 2023를 활성화해야 합니다.

**팁:** Unity가 웹이 아닌 플랫폼의 다른 스레드에 작업을 배포하는 방법에 대해 알아보려면 Unity의 새로운 타임라인 [프로파일러](/engine/6000.0/manual/analysis/profiler.md)를 참조하십시오.

## 성능에 영향을 미치는 웹 관련 설정##web-specific-player-settings-that-affect-performance

성능을 개선하려면 **Other Settings > Stack Trace**를 확장하여 웹용 Player 설정에서 **Exception support**를 **None**으로 설정합니다.

## 프로파일러를 통한 성능 데이터 수집##collect-performance-data-with-the-profilerscrollpoint-id=profiler-/

웹 플랫폼에서 [프로파일러](/engine/6000.0/manual/analysis/profiler/introduction.md)를 사용할 수 있지만, 에디터를 통해 웹으로 빌드된 실행 중인 플레이어에 연결할 수는 없습니다. WebGL API는 통신에 브라우저 측에서 수신되는 연결을 허용하지 않는 WebSocket을 사용하기 때문입니다.

실행 중인 플레이어에 연결하려면 다음과 같이 **Autoconnect Profiler** 설정을 활성화해야 합니다.

1. **Build Profiles** 창(메뉴: **File > Build Profiles**)을 엽니다.
2. 웹 플랫폼을 선택합니다.
3. **Development Build** 설정을 활성화합니다.
4. **Autoconnect Profiler** 설정을 활성화합니다.

**참고:** Unity는 웹 애플리케이션용 드로우 콜을 프로파일링할 수 없습니다.

자세한 내용은 [데이터 소스에 프로파일러 연결](/engine/6000.0/manual/analysis/profiler/collect-data/profiling-applications.md)을 참조하십시오.

## 배경 탭의 웹 콘텐츠##web-content-in-background-tabs

다음 옵션 중 하나가 활성화된 경우 캔버스 또는 브라우저 창이 포커스를 잃어도 콘텐츠가 계속 실행됩니다.

* [웹 플랫폼용 Player 설정](/engine/6000.0/manual/platform-specific/webgl/develop/class-player-settings-web-gl.md)의 **Run in background**
* [Application.runInBackground](/engine/6000.0/script-reference/unity-engine/application/run-in-background.md)

하지만 일부 브라우저는 배경 탭에서 실행 중인 콘텐츠를 조절할 수 있습니다. 콘텐츠가 있는 탭이 보이지 않으면 대부분의 브라우저에서 콘텐츠가 초당 한 번만 업데이트됩니다. 기본 설정에서는 기본값인 [Time.maximumDeltaTime](/engine/6000.0/script-reference/unity-engine/time/maximum-delta-time.md)이 1초 미만이므로 [Time.time](/engine/6000.0/script-reference/unity-engine/time/time.md)이 평소보다 느리게 진행됩니다.

## 웹 성능 조절##throttling-web-performance

일부 상황에서는 CPU 사용량을 줄이기 위해 더 낮은 프레임 속도로 웹 콘텐츠를 실행할 수 있습니다. 예를 들어 다른 플랫폼에서는 이렇게 하기 위해 [Application.targetFrameRate](/engine/6000.0/script-reference/unity-engine/application/target-frame-rate.md) API를 사용할 수 있습니다.

성능을 조절하지 않으려면 이 API를 기본값 -1로 설정합니다. 그러면 브라우저 렌더 루프에서 애니메이션을 가장 매끄럽게 재생할 수 있도록 프레임 속도가 조정되며, Unity가 목표 프레임 속도를 달성하기 위해 스스로 루프 타이밍을 찾는 것보다 더 나은 결과를 얻을 수도 있습니다.

**참고**: Unity는 보안상의 이유로 브라우저에서 프레임 속도를 쿼리할 수 없습니다. 따라서 Unity는 모든 브라우저에 60fps의 표시 속도를 가정하고 이 값의 `Application.targetFrameRate`를 기준으로 합니다.
