Michael,
requestAnimationFrame is better that
setTimeout. It's implemented on most modern browsers. I currently use Paul Irish(Dev Rel for Chrome at Google)'s
requestAnimationFrame shim. It handles the different signatures of requestAnimationFrame, as it is not yet a standard, and falls back to setTimeout if requestAnimationFrame is not available.
Three.js is a great library for 3D but it is important to know the fundamentals first so that you are not captive to a single library and can transfer skills.