Heartbeat, RenderStepped and Stepped Differences

Hey there! The differences between Heartbeat, RenderStepped and Stepped don’t seem very well defined on the wiki:

It would be cool if this image was put somewhere, like on the RunService page, or each of the Event’s pages, to show the differences. (thanks to @richard702 for the pic & @qqtt991 for the help when i asked about this)


When this was brought up earlier in the full member discord, attention was called to how RenderStepped should really only be used for updating the camera because it blocks certain threads. If this is an official recommendation (it came from a Roblox staff member, but it may very well have just been opinion), it being documented along with the differences between them and the order they occur in would be nice.


Yeah, I’ve seen RenderStepped used as pretty much a catch-all method, I had no idea it blocks the thread until @mrow_pizza explained how it works. The devhub sets the standard for good practice, so it being listed there would help massively.


An update from the great beyond - posting this in case anyone’s coming in from Google or other search and trying to find some answers.

The Task Scheduler article was published earlier this year, and it answers most of these questions in depth. Consider also checking out the response in this thread: RenderStepped, Stepped, or Heartbeat

To clarify the questions in this year-old thread for anyone reading this, what @Dekkonot said is true, you should definitely only use BindToRenderStep (and RenderStepped) for updating the camera or updating some visual effects. Make sure whatever you do is running efficiently (for example, cache results of FindFirstChild), and use the MicroProfiler to debug performance issues.

Godspeed readers!