一般に、WebGL グラフィックス API はハードウェアアクセラレーションレンダリングに GPU を使用するため、GPU 上のネイティブのアプリケーションに近いパフォーマンスを得られます。唯一の例外は、WebGL API 呼び出しとシェーダーを OS グラフィック API (通常は Windows の DirectX、Mac と Linux の OpenGL) に変換するためのわずかなオーバーヘッドです。
CPU では、Emscripten がコードを WebAssembly に変換します。そのため、パフォーマンスは使用するウェブブラウザーに依存します。詳細については、Unity のブログ WebAssembly Load Times and Performance を参照してください。
以下は、注意しなければならない追加的な考慮事項です。
ヒント: Unity が WebGL 以外のプラットフォームで異なるスレッドに作業を分配する方法は、Unity の新しいタイムライン プロファイラー を参照してください。
パフォーマンスを向上させるには、WebGL の Player 設定で、Other Settings > Stack Trace を展開して Exception support を None に設定します。
WebGL は、Unity のプロファイラーをサポートします。設定方法について詳しくは、プロファイラー のドキュメントを参照してください。
Run in background が WebGL プラットフォームのプレイヤー設定 で有効になっている場合、または Application.runInBackground を有効にする場合、キャンバスやブラウザーウィンドウがフォーカスを失っても、コンテンツは引き続き実行されます。
ただし、ブラウザーはバックグラウンドタブで実行されているコンテンツを減速する場合があります。コンテンツのタブが表示されない場合、コンテンツはほとんどのブラウザーで 1 秒に 1 回しか更新されません。これにより、デフォルト設定の Time.time の処理速度が通常よりも遅くなることに注意してください。なぜなら、Time.maximumDeltaTime のデフォルト値が 1 秒より短いためです。
ある状況では、CPU の使用を減らすために低いフレームレートで WebGL コンテンツを実行したい場合があります。例えば、他のプラットフォームでは、Application.targetFrameRate API を使ってそれを行うことができます。
パフォーマンスを減速したくない場合、この API に高い値を置くよりもむしろ、デフォルト値 –1 を設定します。こうすることにより、ブラウザーのレンダリングループでもっとも滑らかなアニメーションにフレームレートが調整され、Unity がそのメインループでターゲットフレームレートを調整するよりもよい結果が得られる場合があります。