unity官方文档翻译 + 笔记 | WebGL performance considerations
WebGL性能考虑
总的来说,WebGL性能在GPU上接近本地应用程序,因为WebGL图形API使用GPU进行硬件加速渲染。唯一的例外是将WebGL API调用和着色器转换为您的操作系统图形API(通常是Windows上的DirectX,Mac上的OpenGL和Linux上的OpenGL)的轻微开销。
在CPU方面,Emscripten将您的代码转换为WebAssembly,其性能取决于您使用的Web浏览器。有关更多信息,请参见
以下是您必须注意的其他考虑因素:
- JavaScript语言不支持多线程或SIMD。
- 任何受益于这些功能的代码都可能比其他代码慢。
- 您不能在WebGL中编写脚本中的线程或SIMD代码,但由于一些引擎部分是多线程或SIMD优化的,它们在WebGL上提供了较低的性能。例如,WebGL Skinning是多线程和SIMD优化的。
提示:要查看Unity在非WebGL平台上将工作分配给不同线程的情况,请参见Unity中的新时间轴分析器。
影响WebGL性能的特定设置
为获得最佳性能,在Build Player窗口中将优化级别设置为Faster,并在WebGL Player设置中将异常支持设置为None,方法是展开“Other Settings”>“Stack Trace”。
分析WebGL性能
WebGL支持Unity Profiler。请参阅Profiler文档以了解如何设置它。
后台标签中的WebGL内容
如果在 WebGL 平台的 Player 设置中启用了 Run in background,或者如果启用了 Application.runInBackground,您的内容将在画布或浏览器窗口失去焦点时继续运行。
但是,某些浏览器可能会限制在后台标签页中运行的内容。如果包含该内容的标签页不可见,在大多数浏览器中,您的内容每秒才会更新一次。请注意,这将导致 Time.time 比平常采用默认设置时更慢,因为 Time.maximumDeltaTime 的默认值小于一秒。
限制 WebGL 性能
在某些情况下,您可能希望以较低的帧率运行WebGL内容以减少CPU使用率。例如,在其他平台上,您可以使用Application.targetFrameRate API来实现此目的。
当您不想降低性能时,请将此API设置为默认值-1,而不是高值。这允许浏览器调整帧率以获得最平滑的动画,而不是Unity尝试自己进行主循环定时以匹配目标帧率,这可能会产生更好的结果。