¿Como optimizar la respuesta del servidor?

development
remoteevent
español

#1

Optmización de RemoteEvents
Para cada programador prematuro, la optimización de un sistema puede ser una tarea difícil, esa es la razón de este post.

Si ya tienes tiempo utilizando la API de RemoteEvents, sabrás que el limite de datos que puedes enviar al servidor son 50 KiloBytes por segundo, cuando sabes esto, pensaras en miles de soluciones como:

  • Enviar pocos datos al servidor.
  • Cuidar que envías al servidor.
  • No utilizar de manera radical el servidor.
  • Hacer que el servidor no tenga que recibir señales para hacer una acción.

Todas estas ideas son buenas y podrían funcionar, pero, estas no son la solución definitiva, y podrían ser tediosas a la hora de modificar el código. Por eso si estas interesado, puedes leer esto y sacar tus propias conclusiones.

Si has estado en clases de informática, o has leído algún libro de informática, habrás visto esto:
“El lenguaje de maquina (0 y 1), es un lenguaje que puede llegar a ser ligero en algunas ocaciones.”.
Si prestamos atención a esto, nos damos cuenta que si enviamos los datos deseados con 0 y 1, o simplemente usando numeros al servidor a través de un RemoteEvent, podríamos reducir ese consumo de MegaBytes por segundo y así tendríamos una respuesta mas veloz del servidor, evitando así lo que se conoce como “lag” (Retraso) en el juego, a menos que el cliente tenga una mala conexión.

Si quieres saber que tan bien es la comunicación del usuario con el servidor, podrías usar:

--> Cliente
local Remote = game.ReplicatedStorage.Remote

while wait(1) do
   Remote:FireServer('ConsultarComunicacion')
   local Sig = false
   local TickP = tick()
   local Tiking = Remote.OnClientEvent:Connect(function(Funcion)
         if Funcion == 'Respuesta' then
               Sig = true
         end
   end)
   delay(nil, function()
     while wait() do
           local TickA = tick()
           if Sig then
                 print('El tiempo de respuesta es: ', TickA-TickP)
                 Tiking:Disconnect()
                 break
           end
     end
   end)
end
--> Servidor
local Remote = game.ReplicatedStorage.Remote

Remote.OnServerEvent:Connect(function(Cliente, Funcion)
      if Funcion == 'ConsultarComunicacion' then
           Remote:FireClient(Cliente, 'Respuesta')
     end
end)

Cabe agregar algunas cosas que te podrían servir:

  • Si envías datos que el servidor si ve como existentes, estos datos no retrasaran la respuesta del servidor, ya sean instancias, servicios y demás.

  • Si envías valores que el servidor no pueda ver como existentes, por ejemplo:

    • Ray.new(), CFrame.new(), Vector3.new(), Vector2.new(), shared, Color3.new(), y entres cientos de valores mas que sean creados desde el cliente, causara un retraso en la respuesta del servidor por tener que procesar ese valor.
  • Ciertas tablas pueden causar un retraso en la respuesta del servidor, por ejemplo, tablas obtenidas de un servicio que solo pueden ser utilizados por el cliente, afectaran aun mas la respuesta del servidor, si deseas enviar un tabla así, la única solución es procesar esa tabla por el servidor y le ahorraras ese trabajo al servidor, con procesar por el servidor me refiero a leer todos los datos de esa tabla y convirtiéndolos en una tabla creada por nosotros.

  • Cuidado con que envías en valor Object, si envías una instancia nueva, una instancia ultralocal, podrás retrasar de manera considerada la respuesta del servidor.

Todo esto esta probado con el código anterior, si quieres comprobar tu mismo o tienes dudas de que enviar, puedes utilizar ese código para medir el tiempo de respuesta del servidor.

Este post puede tener errores, si has visto una equivocación hasmelo saber en los comentarios para poder mejorar el tema de optmización.


¿Como acabar con el lag?
#2

Seria como poner escribiendo… respondio…


#3

Que pro, resumiste todo en 5 palabras