Need help optimizing TD enemies

I have an enemy system, and its pretty optimized. But I still want to optimize it more. Also, the lerping is broken, and is still stuttering. Here is the code:

Client:

local Map = ReplicatedStorage:WaitForChild("Map")
local Enemies = ReplicatedStorage:WaitForChild("Enemies")

local Connections = {}

local function OnEnemyAdded(enemy)
	local model: Model = Enemies[enemy.Name]:Clone()
	model.Name = "render"
	model:PivotTo(enemy.Value)
	model.Parent = enemy

	if model.Animations.walk.AnimationId ~= "" then
		local walkanims = model:WaitForChild("AnimationController").Animator:LoadAnimation(model.Animations.walk)
		walkanims:Play()
	end
	model.PrimaryPart.Anchored = true
end

local function OnMapAdded(mapName)
	for _, connection in Connections do
		connection:Disconnect()
	end

	table.clear(Connections)

	local map = Workspace:FindFirstChild(mapName)

	if not map then
		return
	end

	local enemyFolder = map:WaitForChild("enemies")

	local enemyData = {}

	table.insert(
		Connections,
		enemyFolder.ChildAdded:Connect(function(child)
			OnEnemyAdded(child)

			child:GetPropertyChangedSignal("Value"):Connect(function()
				enemyData[child] = child.Value
			end)
		end)
	)

	table.insert(
		Connections,
		enemyFolder.ChildRemoved:Connect(function(child)
			enemyData[child] = nil
		end)
	)

	table.insert(
		Connections,
		RunService.Heartbeat:ConnectParallel(function(deltaTime)
			local i = 1
			local parts = {}
			local cframes = {}
			for part, goalCFrame in enemyData do
				parts[i] = part.render.PrimaryPart
				cframes[i] = part.Value:Lerp(goalCFrame, deltaTime * 3)

				i += 1
			end
			task.synchronize()

			Workspace:BulkMoveTo(parts, cframes, Enum.BulkMoveMode.FireCFrameChanged)
		end)
	)
end

Map.Changed:Connect(OnMapAdded)
OnMapAdded(Map.Value)

Server:

--!native
--!strict
local module = {}
local ServerStorage = game:GetService("ServerStorage")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
--local Players = game:GetService("Players")
local BezierPath = require(ReplicatedStorage.Packages:WaitForChild("BezierPath"))
local paths: table = {}
local enemystats = require(ServerStorage:WaitForChild("EnemyStats"))
local bosshealthbar = ReplicatedStorage.AddHealthBar
--local janitor = require(ReplicatedStorage.Packages.janitor)
local AbilityManager = require(ServerStorage.AbilityManager)
local Enemies = ReplicatedStorage.Enemies
local refresh_rate = 0.025
local enemyData = ReplicatedStorage:WaitForChild("enemyData")

module.createnavpath = function(nodefolder, index)
	local nodePositions = { nodefolder.enemyspawn.Position }

	for i = 1, #nodefolder:GetChildren() - 2 do
		table.insert(nodePositions, nodefolder[i].Position)
	end

	table.insert(nodePositions, nodefolder.exit.Position)
	local pathtable = {
		["path"] = BezierPath.new(nodePositions, 3),
		["nodefolder"] = nodefolder,
	}
	paths[index] = pathtable
end

module.spawn = function(name: string, nodefolderindex: number)
	local enemytable = enemystats.get(name)
	local newPath = paths[nodefolderindex]["path"]
	local offset = math.random(-1.9, 1.9)
	local nodefolder = paths[nodefolderindex]["nodefolder"]
	local actualModel = Enemies[name]
	local _, size = actualModel:GetBoundingBox()
	local rotationalOffset
	if enemytable.rotationOffset ~= nil then
		rotationalOffset = enemytable.rotationOffset
	else
		rotationalOffset = Vector3.zero
	end
	ReplicatedStorage.DebugValues.EnemyCount.Value += 1
	local model = Instance.new("CFrameValue")
	model.Name = name
	model.Value = nodefolder.enemyspawn.CFrame
		* CFrame.new(offset, (size.Y / 2), 0)
	
	model.Value = nodefolder.enemyspawn.CFrame
	model:SetAttribute("Exit", nodefolder.exit.CFrame)

	for _, child in actualModel:GetChildren() do
		if child:IsA("ValueBase") then
			child:Clone().Parent = model
		end
	end

	model:SetAttribute("speed",enemytable.speed)
	model:SetAttribute("health",enemytable.health)
	local speed = model:GetAttribute("speed")
	local health = model:GetAttribute("health")
	if enemytable["abilities"] then
		task.spawn(function()
			for ability, _ in pairs(enemytable["abilities"]) do
				AbilityManager.register("enemies", ability, model)
			end
		end)
	end
	model.Parent = workspace[ReplicatedStorage.Map.Value]:WaitForChild("enemies")
	-- model:SetAttribute("Exit", spawns.Parent.exit)
	if enemytable.modifiers["boss"] then
		print("boss", model)
		bosshealthbar:FireAllClients(enemytable.name, model)
	end
	local modelTask = task.spawn(function()
		local PreviousTime = os.clock()

		local t = 0

		while t < 1 do
			task.desynchronize()
			t += (os.clock() - PreviousTime) * speed / newPath:GetPathLength()
			PreviousTime = os.clock()
			local transformedcframe = newPath:CalculateUniformCFrame(t)
				* CFrame.new(offset, (size.Y / 2), 0)
				* CFrame.Angles(rotationalOffset.X, rotationalOffset.Y, rotationalOffset.Z)
			task.synchronize()

			model.Value = transformedcframe
			model:SetAttribute("TranslatedIndex", t)
			task.wait(refresh_rate)
		end
		ReplicatedStorage.DebugValues.EnemyCount.Value -= 1
		if model then
			ReplicatedStorage.BaseHealth.Value -= health
		end
		task.wait()
		if modelTask then
			task.cancel(modelTask)
		end
		model:Destroy()
		model = nil
	end)
	local healthconnection = nil
	healthconnection = model:GetAttributeChangedSignal("health"):Connect(function(newHealth)
		if newHealth <= 0 then
			ReplicatedStorage.DebugValues.EnemyCount.Value -= 1
			task.cancel(modelTask)
			if model then
				model:Destroy()
			end
			if healthconnection then
				healthconnection:Disconnect()
			end
		end
	end)
end

return module

Thanks in Advance!

Edit: Current Benchmarks:

1000 Enemies:
FPS: 20
Network Reciv: 1000 kb