Gotta be the first one, the other examples are just unnecessary and I don’t think it effects that much optimization wise. The second will for sure take a bit longer to get due to the wait however not by much. Plus I’m not sure how consistent .ChildAdded is, as in what if the child is already loaded before the event is connected. I would just stick to :WaitForChild()
If the game is loading and a function like playeradded is called and it needs something specific then that’s practical use for WaitForChild but like if a script needs a part to be created before it moves on that might be a better example of why you’d use the repeat code, though its kind of expensive to use. Not certain the last one is feasible.