ProfileService Efficiency Question

Hello everyone, I am currently messing around with ProfileService for saving player data and I have come across something that may question the efficiency of my script.

Essentially what I am trying to do is utilize a singular :PlayerAdded() event throughout my entire game via one server script that basically initializes every other local or server script that may need the :PlayerAdded() event. The purpose of this is to avoid conflicting script queues with :PlayerAdded() so I can manually prioritize certain events (bindable/remote) upon a player joining. For example, ensuring that a player’s location data loads before I take the player’s base out of server storage.

Here is an example of the solution I have right now:

local function onPlayerAdded(player)

	local player_data = DataManager:Get(player)

	if player_data then
		
		print("Loaded Data")
		-- loading data is #1 priority.
		loadData(player, player_data)
        -- Fire the next most important bindable/remote event.
        -- Continue to fire events in descending order of importance.
		
	else
		--[[
          This 'else' statement is how I make absolutely sure the
          player's data is loaded before any other events fire.
         ]]
		print("HAD TO WAIT!")
		wait()
		onPlayerAdded(player)

	end
end

game.Players.PlayerAdded:Connect(onPlayerAdded)

My main concern here – as well as the reason behind this post – is whether or not recalling the onPlayerAdded() function if the player’s data could not be found will cause performance issues or data store throttles if I’m storing a relatively large amount of data. The thing that worries me the most when it comes to scripting is potentially having too many data store requests, as well as having performance issues. So if there are any immediate performance/data issues please let me know!