Web 性能注意事项
Web performance considerations.
阅读时间5 分钟最后更新于 1 个月前
通常,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 中的新管线性能分析器。
影响性能的 Web 特有设置
要提高性能,请在 Web 的播放器设置中通过展开其他设置 (Other Settings) > 堆栈追踪 (Stack Trace),将异常支持 (Exception support) 设置为无 (None)。
使用性能分析器收集性能数据
可以在 Web 平台中使用性能分析器,但不能通过编辑器连接到使用 Web 构建的正在运行的播放器。这是因为 WebGL API 使用 WebSocket 进行通信,所以不允许浏览器端的传入连接。
要连接到正在运行的播放器,需要启用自动连接性能分析器 (Autoconnect Profiler) 设置:
- 打开构建配置文件 (Build Profiles) 窗口(菜单:文件 (File) > 构建配置文件 (Build profiles))。
- 选择 Web 平台。
- 启用开发构建 (Development Build) 设置。
- 启用自动连接性能分析器 (Autoconnect Profiler) 设置。
**注意:**Unity 无法对 Web 应用程序的绘制调用进行性能分析。
有关更多信息,请参阅将性能分析器连接到数据源。
后台标签中的 Web 内容
如果启用了以下选项之一,当画布或浏览器窗口失去焦点时,内容将继续运行:
但是,某些浏览器可能会限制在后台标签页中运行的内容。如果包含该内容的标签页不可见,在大多数浏览器中,您的内容每秒才会更新一次。请注意,这将导致 Time.time 比平常采用默认设置时更慢,因为 Time.maximumDeltaTime 的默认值小于一秒。
限制 Web 性能
在某些情况下,可能希望以较低的帧率运行 Web 内容,以降低 CPU 使用率。例如,在其他平台上,可以使用 Application.targetFrameRate API 来执行此操作。
如果不想限制性能,请将此 API 设置为默认值 -1。如此,浏览器便可调整帧率以便在浏览器的渲染循环中实现最平滑的动画,获得的效果可能好于 Unity 尝试执行自身的主循环时序来匹配目标帧率。
注意:出于安全原因,Unity 无法查询浏览器的帧率。因此,Unity 假定所有浏览器的显示速率为 60 fps,并基于该值设置 。
Application.targetFrameRate