function update() {
  /* 1ループあたりの処理 */
  requestAnimationFrame(update);
};

これでCSSレンダリングと同期するような挙動で、毎フレームのループ処理が可能。
フレームレートは基本60fpsだけど、環境により変動するから、deltaTimeは重要!

let lastFrameTime = 0;
function update(currentTime = 0) {
  const deltaTime = currentTime - lastFrameTime;
  lastFrameTime = currentTime;
  /* 1ループあたりの処理 */
  requestAnimationFrame(update);
};