Help: Auto-clicker FPS drop when using both manual and auto-click (problem in server)

--Client
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local UserInputService = game:GetService("UserInputService")

local Events = ReplicatedStorage:WaitForChild("Events")
local clickEvent = Events:WaitForChild("ClickEvent")

local player = game.Players.LocalPlayer
local playerGui = player.PlayerGui
local HUD = playerGui:WaitForChild("HUD")
local main = HUD.Main
local clickButton = main.Click
local autoButton = main.Auto

local canClick = true
local auto = false
local COOLDOWN_TIME = 0.1
local coroutineAutoClicker

local function turnColorAutoButton()
	if auto then
		autoButton.Background.BackgroundColor3 = Color3.new(0.494118, 1, 0.458824)
	else
		autoButton.Background.BackgroundColor3 = Color3.new(1, 0.290196, 0.301961)
	end
end

local function setCooldown()
	canClick = false
	task.wait(COOLDOWN_TIME)
	canClick = true
end

local function onClick()
	if not canClick then return end
	clickEvent:FireServer()
	setCooldown()
end

local function onAutoClicker()
	while auto do
		onClick()
	end
end

local function toggleAutoClicker()
	auto = not auto

	if auto then
		coroutineAutoClicker = coroutine.create(onAutoClicker)
		coroutine.resume(coroutineAutoClicker)
	else
		coroutine.resume(coroutineAutoClicker)
		coroutine.close(coroutineAutoClicker)
		coroutineAutoClicker = nil
	end

	turnColorAutoButton()
end

local function onInputBegan(input: InputObject, isProcessedByGame: boolean)
	if isProcessedByGame then return end

	if input.UserInputType == Enum.UserInputType.MouseButton1 then
		onClick()
	end
end

clickEvent.OnClientEvent:Connect(function()
	
end)

clickButton.MouseButton1Click:Connect(onClick)
autoButton.MouseButton1Click:Connect(toggleAutoClicker)
UserInputService.InputBegan:Connect(onInputBegan)
--Server

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ServerStorage = game:GetService("ServerStorage")

local Abbreviation = require(ReplicatedStorage.Modules.Abbreviation)
local MultipliersUtility = require(ReplicatedStorage.Packages.Utility.MultipliersUtilitiy)
local DataManager = require(ServerStorage.DataManager)
local Units = require(ServerStorage.SharedAssets.Modules.Units)

local Events = ReplicatedStorage.Events
local clickEvent = Events.ClickEvent

local MAX_CLICKS_BEFORE_XP = 10

local playersClicks = {} :: {[number]: number}

local function LevelUpUnits(player, data)
	if not data then return end

	for i,v in data.Units do
		if not v.Equipped then continue end
		
		local UnitData = Units.GetUnitData(v.Name)

		if UnitData.Rarity:find("Exclusive") then continue end

		local Amount = (v.Level / math.pi) ^ UnitData.XPRate
		local Required = ((v.Level * UnitData.XPRate) * 100 / math.pi) ^ (UnitData.XPRate * UnitData.XPRate)
		if v.XP >= Required then
			v.XP -= Required
			v.Level += 1
		else
			v.XP += Amount
		end
	end
end

local function onClick(player: Player)
	local playerClicks = playersClicks[player.UserId]
	local data = DataManager:GetData(player, true)
	
	assert(data, "[CLICK ERROR]: Data not found for player!")

	local energyAmount = MultipliersUtility:EnergyMultiplier(data.Data)

	DataManager:SetData(player, "Energy", (data.Data.Energy + energyAmount))
	DataManager:SetData(player, "TotalEnergy", (data.Data.TotalEnergy + energyAmount))
	player.leaderstats.Energy.Value = Abbreviation.CurrencyEnding(math.floor(data.Data.Energy))

	playersClicks[player.UserId] += 1
		
	if playersClicks[player.UserId] >= MAX_CLICKS_BEFORE_XP then
		playersClicks[player.UserId] = 0
		LevelUpUnits(player, data.Data)
	end
end

local function onClickEvent(player: Player, action, autoBool)
	local playerClicks = playersClicks[player.UserId]

	if not playerClicks then
		playersClicks[player.UserId] = 0
		
		playerClicks = playersClicks[player.UserId]
	end
	
	onClick(player)
end

clickEvent.OnServerEvent:Connect(onClickEvent)