Why is this sending a ton of requests to the module scripts?

Theoretically yes. Technically it’s bad practice, and Roblox Studio opts to place a Script Timeout Length for you by default, but you can easily change it. The reason they place the timer is to avoid you using it in the first place as loops should be finite.

Here’s a good source on managing if you absolutely HAVE to use an infinite loop.

EDIT: More info…

Furthermore, a script with connections would run ONCE and then saved as instances until needed. Even if it is connected forever, the script itself is not running forever. Which is why connections are the way to go since the engine is made for you. An infinite loop is only ever necessary by the engine, not the stuff built on top of it which is what you’re primarily doing when scripting in Roblox. If you need an “Infinite loop” for example you can do so with things such as: In local scripts runService.RenderStepped, runService.Heartbeat:Wait() and such things which are built on top of the running engine.