How to efficiently communicate mouse data between client and server?

Whilst working on a grabbing system, I’ve stumbled on a problem. The position of the item that the player was moving only gets updated once the player releases their left click. Since sending the server an event for every mouse.Move per player is taxing, I’ve decided to just update the final position to the server.

Here’s some footage of how it works. Whilst the item’s material is neon, that means the position is local, and the server does not see that position.


How could I efficently update the data to the server every time the mouse moves without heavily taxing the performance?

client script (StarterPlayerScripts)
local lplr = game.Players.LocalPlayer
local mouse = lplr:GetMouse()

local cc = workspace.CurrentCamera
local up = true
local node = workspace.nodes.Node
local sM : Enum.Material 

local tMConnection : RBXScriptConnection

function TrackMouse()

	node.CFrame = mouse.Origin + mouse.Origin.LookVector*5

end

mouse.Button1Down:Connect(function()
	node.Anchored = true
	node.Transparency = .5
	sM = node.Material
	node.Material = Enum.Material.Neon
	tMConnection = mouse.Move:Connect(TrackMouse)
	
end)


mouse.Button1Up:Connect(function()
	node.Anchored = false
	node.Transparency = 0
	node.Material = sM
	tMConnection:Disconnect()
	game.ReplicatedStorage.UpdateNodePos:FireServer(node.CFrame)
end)
server script (ServerScriptService)
local node = workspace.nodes.Node
local uNp = game.ReplicatedStorage.UpdateNodePos


uNp.OnServerEvent:Connect(function(plr,cf:CFrame)
	node.CFrame = cf
end)

(workspace.Nodes.node refers to the item. Later on I’ll adapt the system to edit the node that was clicked by the player, but as of now, it’s just this item)

Honestly man, you dont even need remote events just use bodymovers, as they are replicated and smoother.

Of course this opens up the system for exploitation but it will solve your problem