The render loop is a dangerous place to put unoptimized logic. Running heavy calculations on every single frame instead of caching values or using web workers is the quickest way to drop your frame rate from 60 to a stuttering 15.
That’s the silent killer of WebGL projects. Most people don't realize how quickly requestAnimationFrame can become a bottleneck if you're doing heavy lifting inside the loop. Moving logic out to Web Workers or simply memoizing values is the difference between a smooth experience and a choppy, unresponsive mess.