QA@IT
«回答へ戻る

edit

2024
-`setTimeout(someFunction, 0)`の意図は、イベントループの次回で即時実行するという意味で、nodeのprocess.nextTickみたいなものです。(微妙に実装依存で違いがあるようですが)
+`setTimeout(someFunction, 0)`の意図は、イベントループの次回で即時実行するという意味で、nodeの`process.nextTick()`みたいなものです。(微妙に実装依存で違いがあるようですが)
 
 UIとかリアルタイム系の処理をするときには、まとまった計算コストのかかるシリアルな処理を分割して、なるべく1ループあたりのブロック時間(といっても、この場合はI/OではなくCPU)を短くして、負荷を時間軸で分散することがあります。そうしないと、1回のループで16ms以上かかったら60fpsを達成できずカクカクしてしまうからです。
 

setTimeout(someFunction, 0)の意図は、イベントループの次回で即時実行するという意味で、nodeのprocess.nextTick()みたいなものです。(微妙に実装依存で違いがあるようですが)

UIとかリアルタイム系の処理をするときには、まとまった計算コストのかかるシリアルな処理を分割して、なるべく1ループあたりのブロック時間(といっても、この場合はI/OではなくCPU)を短くして、負荷を時間軸で分散することがあります。そうしないと、1回のループで16ms以上かかったら60fpsを達成できずカクカクしてしまうからです。

この例については推測ですが、updateForRealTimeDoneInitializingupdateCollaboratorsinitCubeがそれぞれ結構CPU的に重い処理で、3ループに分割することで、3つ全部終えるには48ms近くかかる遅いCPUでも60fpsを達成しようとしている、みたいな感じではないでしょうか。

`setTimeout(someFunction, 0)`の意図は、イベントループの次回で即時実行するという意味で、nodeの`process.nextTick()`みたいなものです。(微妙に実装依存で違いがあるようですが)

UIとかリアルタイム系の処理をするときには、まとまった計算コストのかかるシリアルな処理を分割して、なるべく1ループあたりのブロック時間(といっても、この場合はI/OではなくCPU)を短くして、負荷を時間軸で分散することがあります。そうしないと、1回のループで16ms以上かかったら60fpsを達成できずカクカクしてしまうからです。

この例については推測ですが、`updateForRealTimeDoneInitializing`と`updateCollaborators`と`initCube`がそれぞれ結構CPU的に重い処理で、3ループに分割することで、3つ全部終えるには48ms近くかかる遅いCPUでも60fpsを達成しようとしている、みたいな感じではないでしょうか。

回答を投稿

setTimeout(someFunction, 0)の意図は、イベントループの次回で即時実行するという意味で、nodeのprocess.nextTickみたいなものです。(微妙に実装依存で違いがあるようですが)

UIとかリアルタイム系の処理をするときには、まとまった計算コストのかかるシリアルな処理を分割して、なるべく1ループあたりのブロック時間(といっても、この場合はI/OではなくCPU)を短くして、負荷を時間軸で分散することがあります。そうしないと、1回のループで16ms以上かかったら60fpsを達成できずカクカクしてしまうからです。

この例については推測ですが、updateForRealTimeDoneInitializingupdateCollaboratorsinitCubeがそれぞれ結構CPU的に重い処理で、3ループに分割することで、3つ全部終えるには48ms近くかかる遅いCPUでも60fpsを達成しようとしている、みたいな感じではないでしょうか。

`setTimeout(someFunction, 0)`の意図は、イベントループの次回で即時実行するという意味で、nodeのprocess.nextTickみたいなものです。(微妙に実装依存で違いがあるようですが)

UIとかリアルタイム系の処理をするときには、まとまった計算コストのかかるシリアルな処理を分割して、なるべく1ループあたりのブロック時間(といっても、この場合はI/OではなくCPU)を短くして、負荷を時間軸で分散することがあります。そうしないと、1回のループで16ms以上かかったら60fpsを達成できずカクカクしてしまうからです。

この例については推測ですが、`updateForRealTimeDoneInitializing`と`updateCollaborators`と`initCube`がそれぞれ結構CPU的に重い処理で、3ループに分割することで、3つ全部終えるには48ms近くかかる遅いCPUでも60fpsを達成しようとしている、みたいな感じではないでしょうか。