Most efficient way to make a car crash?

So currently, my script would detect if the part has been hit and also using a raycast to get the velocity of the hit part.

local breakSpeed = 60

local function raycastForPart(part)
	local rayOrigin = part.Position
	local rayDirection = (part.Position.Unit * part.Size.Magnitude) * 2
	local raycastResult = workspace:Raycast(rayOrigin, rayDirection)

	if raycastResult then
		local hit = raycastResult.Instance
		local speed = (part.AssemblyLinearVelocity - hit.AssemblyLinearVelocity).Magnitude
		local Power = part:GetAttribute("Power")
		
		local canBreak = checkCanBreak(part, hit)

		if canBreak then
			if Power and speed >= Power then
				onTouched(part, hit)

			elseif not Power and speed >= breakSpeed then
				onTouched(part, hit)
			end
		end
	end
end

for i,v in ipairs(Parts:GetDescendants()) do
	if v:IsA("BasePart") then
		v.Touched:Connect(function(hit)
			local speed = (v.AssemblyLinearVelocity - hit.AssemblyLinearVelocity).Magnitude
			local Power = v:GetAttribute("Power") -- an attribute in the part (the speed of when it can break in velocity)

			local canBreak = checkCanBreak(v, hit)

			if canBreak then
				if Power and speed >= Power then
					onTouched(v, hit)

				elseif not Power and speed >= breakSpeed then
					onTouched(v, hit)
				end
			end
		end)

		RunService.Heartbeat:Connect(function()
			local isWelded = checkIfPartIsWelded(v)

			if isWelded then
				raycastForPart(v)
			end
		end)
	end
end

Is this the most efficient way or is there a better one?