# Web 性能注意事项

> Web performance considerations.

通常，Web 性能应该接近于 GPU 上的原生应用程序，这是因为 WebGL 图形 API 使用 GPU 进行硬件加速渲染。唯一的例外是将 WebGL API 调用和着色器转换为操作系统图形 API（通常是 Windows 上的 DirectX，或者是 Mac 或 Linux 上的 OpenGL）会有轻微开销。

在 CPU 上，Emscripten 会将您的代码转换为 WebAssembly，因此性能取决于正在使用的 Web 浏览器。

请注意以下事项：

* Unity 为 C/C++ 代码提供了多线程，但由于 WebAssembly 的限制，尚未为 C# 代码提供多线程。
* 使用 WebGL API 进行渲染时，WebGL 操作的 CPU 端分发速度比原生 OpenGL 中更慢。因此，为了获得最佳性能，建议的最佳做法是避免每帧进行大量绘制调用，因此请确保在着色器中使用实例化和批处理技术。
* WebAssembly 2023 功能集支持 Web 上的 SIMD。确保在较新的浏览器上启用 WebAssembly 2023 以获得最佳性能。

\*\*提示：\*\*若要了解 Unity 如何将工作分配到非 Web 平台上的不同线程，请参阅 Unity 中的新管线[性能分析器](/engine/6000.0/manual/analysis/profiler.md)。

## 影响性能的 Web 特有设置##web-specific-player-settings-that-affect-performance

要提高性能，请在 Web 的播放器设置中通过展开**其他设置 (Other Settings) > 堆栈追踪 (Stack Trace)**，将**异常支持 (Exception support)** 设置为**无 (None)**。

## 使用性能分析器收集性能数据##collect-performance-data-with-the-profilerscrollpoint-id=profiler-/

可以在 Web 平台中使用[性能分析器](/engine/6000.0/manual/analysis/profiler/introduction.md)，但不能通过编辑器连接到使用 Web 构建的正在运行的播放器。这是因为 WebGL API 使用 WebSocket 进行通信，所以不允许浏览器端的传入连接。

要连接到正在运行的播放器，需要启用**自动连接性能分析器 (Autoconnect Profiler)** 设置：

1. 打开**构建配置文件 (Build Profiles)** 窗口（菜单：**文件 (File) > 构建配置文件 (Build profiles)**）。
2. 选择 Web 平台。
3. 启用**开发构建 (Development Build)** 设置。
4. 启用**自动连接性能分析器 (Autoconnect Profiler)** 设置。

\*\*注意：\*\*Unity 无法对 Web 应用程序的绘制调用进行性能分析。

有关更多信息，请参阅[将性能分析器连接到数据源](/engine/6000.0/manual/analysis/profiler/collect-data/profiling-applications.md)。

## 后台标签中的 Web 内容##web-content-in-background-tabs

如果启用了以下选项之一，当画布或浏览器窗口失去焦点时，内容将继续运行：

* 在 [Web 平台的播放器设置](/engine/6000.0/manual/platform-specific/webgl/develop/class-player-settings-web-gl.md)中**在后台运行**
* [Application.runInBackground](/engine/6000.0/script-reference/unity-engine/application/run-in-background.md)

但是，某些浏览器可能会限制在后台标签页中运行的内容。如果包含该内容的标签页不可见，在大多数浏览器中，您的内容每秒才会更新一次。请注意，这将导致 [Time.time](/engine/6000.0/script-reference/unity-engine/time/time.md) 比平常采用默认设置时更慢，因为 [Time.maximumDeltaTime](/engine/6000.0/script-reference/unity-engine/time/maximum-delta-time.md) 的默认值小于一秒。

## 限制 Web 性能##throttling-web-performance

在某些情况下，可能希望以较低的帧率运行 Web 内容，以降低 CPU 使用率。例如，在其他平台上，可以使用 [Application.targetFrameRate](/engine/6000.0/script-reference/unity-engine/application/target-frame-rate.md) API 来执行此操作。

如果不想限制性能，请将此 API 设置为默认值 -1。如此，浏览器便可调整帧率以便在浏览器的渲染循环中实现最平滑的动画，获得的效果可能好于 Unity 尝试执行自身的主循环时序来匹配目标帧率。

**注意**：出于安全原因，Unity 无法查询浏览器的帧率。因此，Unity 假定所有浏览器的显示速率为 60 fps，并基于该值设置 `Application.targetFrameRate`。
