Ir para conteúdo

Skript laga? #3 - Os loops causam lag em seu código???


danielzinh

Posts Recomendados

Aos poucos, vamos quebrar a lenda que o Skript pode lagar.

 

os códigos estarão todos listados no tópico, você mesmo pode testar.

 

Afinal, de onde saiu essa lenda?: Há muito tempo atrás, um youtuber resolveu criar um servidor inteiro usando Skript, até ai tudo bem, o skript não laga se você souber usar, porém, o cidadão usava códigos extremamente mal otimizados, sem nem colocar um "else" (para vocês verem). e dai, o vídeo explodiu com a fama de que o Skript laga.

 

Hardware usado:

- Processador: A4-7300 (2c-2t)

- 8GB RAM DDR3

 

Breve explicação: com o tempo que aprendi sendo um criador profissional de códigos, eu sei e posso AFIRMAR que loops não lagam se usado com carinho e cuidado, e vou provar isso nesse código aqui!

Além de provar, vou mostrar um jeito ótimo de se otimizar seus loops, e também mostrar cuidados e o que se deve e não se deve fazer.

 

O que você deve usar:

Não use:

loop all blocks in radius 30 around player:

Use:

loop blocks within {_loc1} to {_loc2}:

Qual a diferença?

O primeiro código da um loop em todos os blocos em um raio ESFÉRICO de 30 blocos, isso causa lag se dentro desse loop possuir muitos códigos.

O segundo código da um loop só nos blocos entre o bloco {_loc1} e o {_loc2}, assim você pode controlar o loop, fazer com que ele dê loop em uma área quadrada, ou até mesmo de uma só camada, sendo um loop horizontal.

-------------------------

Não use:

every 1 tick

Use:

every 1 seconds

Qual a diferença?

Usar loops abaixo de um segundo (<=19 ticks) pode prejudicar seu server, além do lag absurdo, não há nenhuma necessidade de se usar um every tão baixo.

O segundo loop é um every ideal para seu servidor, mas não exagerem, o recomendado é no mínimo um segundo de every para cada 75 linhas de código para evitar lag.

-------------------------

Não use:

is more than or equal to

Use:

>=

Qual a diferença?

Eu percebi que quanto maior o tamanho da linha do código, maior o tempo de recarga do Skript, por isso, evitem o máximo usar linhas grandes de código, encurtem o máximo que puderem!

-------------------------

Loops lagam?

siga o código a seguir:

command /lag-machine:
	trigger:
		set {_x} to now
		loop all blocks in radius 50 around player:
		broadcast "%difference between {_x} and now%"

Apesar de ter um loop grande (50 blocos) ali, ele não possui nada dentro dele, quantos segundos você acha que esse comando demorará para carregar? (o código já contém um temporizador que diz o tempo que ele demorou para carregar)

Comando executado: image.png.c2d3120cf87f4457e1d12bcf06bb6da0.png

 

Pois é, amigos. O comando demorou 0.3 segundos para executar, isso já quebra TOTALMENTE o mito de que loops lagam.

Ok, eu sei que terá gente que irá reclamar que só um loop não é o suficiente pra um teste...

Então vamos aumentar esse loop

command /lag-machine:
	trigger:
		set {_x} to now
		loop all blocks in radius 50 around player:
			loop-block is dirt
			add 1 to {_xe}
		broadcast "%difference between {_x} and now% - Terras encontradas: %{_xe}%"

esse código conta quantas terras tem no raio do loop

Comando executado: image.png.d626ebedf983da73eaa54cc066314e3b.png

 

Legal, o tempo aumentou razoavelmente, mas para um loop de 50 blocos com um if de comparação e uma adição a uma variável eu acho um tempo super justo. Então não amigos LOOPS NÃO LAGAM (se usados de forma correta e otimizada)

-------------------------

Linhas grandes travam?

não exatamente, só aumenta (E MUITO) o tempo de recarga do seu código, vamos a um exemplo:

command /b:
	trigger:

Apenas um comando simples, não? demorou apenas image.png.3d0aa773459cf939fb41ac281843211a.png para carregar.

 

Agora:

command /b:
	trigger:
		set slot 0 of player's current inventory to white concrete named "&fApenas um concreto" with lore "", "Lore sem graça", "", "Enrolando" if name of player's current inventory contains "Um nome de um menu aleatório"

Legal, não? DEMOROU MAIS DE UM SEGUNDO PARA CARREGAR SÓ POR CAUSA DE UMA LINHA!!    image.png.342f54e70fe980c6370a4eb3da4266f4.png

 

NÃO ACREDITA? TESTE VOCÊ MESMO.

command /b:
	trigger:
		set slot 0 of player's current inventory to white concrete named "&fApenas um concreto" with lore "", "Lore sem graça", "", "Enrolando" if name of player's current inventory contains "Um nome de um menu aleatório"
on command "sk":
	if arguments contains "reload":
		set {x} to now
on load:
	broadcast "%difference between {x} and now%"

código completo incluindo o temporizador.

 

ACABEI DE PROVAR AQUI QUE... O SKRIPT EM SI NÃO LAGA, SÓ LAGA SE VOCÊ EXAGERAR E FAZER MERDA!

 

 

 

é isso pessoal, vejo vocês no próximo capitulo dessa "série".

 

Confira nossos outros tópicos dessa série:

Skript laga #1 - clique-me

 

Skript laga #2 - clique-me

image.png

image.png

image.png

Link para o comentário
Compartilhar em outros sites

8 minutos atrás, gabrielv disse:

O tempo que o Skript leva para carregar os arquivos na inicialização não vai mudar absolutamente nada, tem que ser levado o tempo que demora pra executar cada código com o servidor rodando...

Olá, durante o teste foi feito o teste ao executar cada código como na print:

image.png.ce4e3f0f965f0c4c322f9498c42aed0e.png

 

 

Você deve estar se referindo ao teste de tamanho de linhas, eu deixei claro que era o tempo de inicialização.

 

E mesmo assim, aumentou 1 segundo de recarga com uma só linha de código mal-otimizada, imagina um skript completamente mal feito? não quero nem pensar.

Link para o comentário
Compartilhar em outros sites

Em 02/04/2021 em 22:16, gabrielv disse:

O tempo que o Skript leva para carregar os arquivos na inicialização não vai mudar absolutamente nada, tem que ser levado o tempo que demora pra executar cada código com o servidor rodando...

eu estou tentando explicar isso faz tempo mas kkkkkkk

ele não aprende

Link para o comentário
Compartilhar em outros sites

16 minutos atrás, RektByDead disse:

eu estou tentando explicar isso faz tempo mas kkkkkkk

ele não aprende

 

Em 02/04/2021 em 18:26, danielzinh disse:

Olá, durante o teste foi feito o teste ao executar cada código como na print:

image.png.ce4e3f0f965f0c4c322f9498c42aed0e.png

 

 

Você deve estar se referindo ao teste de tamanho de linhas, eu deixei claro que era o tempo de inicialização.

 

E mesmo assim, aumentou 1 segundo de recarga com uma só linha de código mal-otimizada, imagina um skript completamente mal feito? não quero nem pensar.

 

Aprenda a ler o tópico antes de comentar asneira, por favor.

Editado por danielzinh
Link para o comentário
Compartilhar em outros sites

ANÁLISE DE CONTEÚDO DESATUALIZADO

Este tópico foi automaticamente arquivado devido à falta de atualizações recentes ou ao fato de o conteúdo estar desatualizado em relação às práticas ou informações atuais. Para manter a qualidade e relevância das discussões na comunidade, tópicos sem novas atualizações ou com informações obsoletas são periodicamente arquivados.

Se houver novos dados ou atualizações pertinentes ao tema, sinta-se à vontade para criar um novo tópico com as informações atualizadas.

Equipe de Moderação
Gamer's Board
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...