[Tutorial] Optimizaзхes - Printable Version
+- SA-MP Forums Archive (
https://sampforum.blast.hk)
+-- Forum: Non-English (
https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (
https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Português/Portuguese (
https://sampforum.blast.hk/forumdisplay.php?fid=34)
+----- Forum: Lançamentos/Releases (
https://sampforum.blast.hk/forumdisplay.php?fid=56)
+----- Thread: [Tutorial] Optimizaзхes (
/showthread.php?tid=335803)
Optimizaзхes -
RebeloX - 19.04.2012
Optimizaзхes
Bem vindos a outro tutorial, neste tutorial irei ensinar algumas optimizaзхes que podemos fazer, deixando assim o seu cуdigo mais limpo e rбpido, lembrando que podemos diminuir o tamanho do amx, entгo vamos lб.
Arrays
Normalmente quando nуs criamos arrays podemos torna-las globais ou locais, eu antigamente usava sу arrays locais, pois pensava que seria mais optimizado, mas foi ai que eu pensei, para que й que vou usar mais arrays locais sendo que eu irei usa-las mais que uma vez?
Certo, entгo eu comecei a usar arrays globais.
Entгo quando й que eu devo usar arrays locais?
Simples, quando for usa-la apenas 1 vez, caso use mais que 1 vez torna-a global.
Mas entгo e as strings?
Faзa o mesmo, alias elas sгo uma array, mas sim teremos um tratamento diferente com elas, dos quais sгo:- Mбximo de cйlulas
- Caso seja uma string para texto use no mбximo 128 caracteres.
- Caso seja para salvamento de dados vocк pode usar mais que 128, no meu caso eu uso 600 pois uso MySQL e no pawn requer uma string(query) grande.
- Globais ou Locais?
- Em caso de strings eu aconselho vocк a colocar global, ou seja, a string й usada para formatar um testo e nгo para armazenar dados o que permite vocк usar apenas uma, caso queira usar string para gravar dados ai sim poderб fazer uma local.
- Quantidade
- Em caso de strings crie apenas 1 no seu cуdigo, mas como eu disse sу em caso extremos em que vocк deseja armazenar uma string ai sim pode criar mais que 1.
Vocк tambйm pode usar o rBitz feito pelo RyDeR`, clique Aqui para ver um tutorial sobre o rBitz feito pelo Shelby, o rBitz й muito ъtil, ele faz com que o seu amx fique mais pequeno e que use Bits mais pequenos, pois cada array й igual a 32 Bits, com o rBitz vocк pode usar arrays de 1 Bit, 2 Bits , 4 Bits, 8 Bits e 16 Bits.
Indentar
Indentar й uma coisa muito ъtil nos nossos cуdigos, cada um pode adotar o seu prуprio "estilo", a idenзгo nгo й sу obrigatуria como torna o seu cуdigo bonito e limpo, exemplo de cуdigo
pawn Code:
CMD:commando(playerid)
{
if(IsPlayerAdmin(playerid))
{
GivePlayerMoney(playerid,1000);
}
return 1;
}
Este cуdigo jб esta identado, isto й o minimo que vocк deve fazer apertando TAB vocк farб uma raiz mais ou menos.
PHP Code:
{
{
{
{
{
}
}
}
}
}
Como vocк pode ver no nosso comando gastamos 8 linhas mas podemos usar a Operaзгo ternбria que faz nosso cуdigo ficar ainda pequeno, entгo veja.
pawn Code:
CMD:commando(playerid)
return IsPlayerAdmin(playerid) ? true : (GivePlayerMoney(playerid,1000), true);
Neste caso nуs gastamos apenas 1/4 das 8 linhas, ou seja, 2 linhas, o que й realmente muito pouco, vocк pode consultar o tуpico do Garfield Aqui , ele й ъtil em alguns casos, claro que nгo iremos usar em cуdigos grandes com funзхes grandes, mas vocк pode criar o seu prуprio estilo, lembrando que essas idenзхes nгo tornaram o seu cуdigo mais rбpido, nunca fiz um teste alias, mas tornaram o seu cуdigo mais pequeno, pois se vocк ultrapassar o limite de linhas no pawn o seu amx comeзara a ter erros.(atualmente nгo sei o limite de linhas mas acho que й 120mil linhas, entгo й sempre bom identamos os nossos cуdigos)
Benchmarks
As benchmarks sгo chamado os testes de velocidade, a uns tempos atras fiz um tуpico com testes de velocidade que estavam errados mas agora aprendi, as Benchmarks servem para optimizar o seu server, ou seja, vocк usarб coisas mais rбpidas e em termos de execuзгo fara com o que o seu servidor seja mais rбpido a executar certas funзхes, mas lembrando que para vocк fazer uma benchmark nгo pode ficar vendo videos, musicas ou falando com alguйm, pois a benchmark irб se alterar em microssegundos o que poderб trazer um mau resultado.
No meu caso eu uso esta benchmark feito pelo Slice que encontrei Aqui e eu uso esta:
pawn Code:
#define BENCH(%0,%1) \
for(new _i, _t = GetTickCount(), _c; _t; ) \
if(_t != GetTickCount()) \
for(_i = _t = GetTickCount(); _t; _i = GetTickCount()) \
if((_i - _t) == (%0)) \
for(_t = GetTickCount(); _t; ) \
if(_t != GetTickCount()) \
for(_i = _t = GetTickCount(); ; ++_c, _i = GetTickCount()) \
if((_i - _t) == (%0)) { \
printf(" Bench for " %1 ": executes, by average, %.2f times/ms.", floatdiv(_c, (%0))); \
_t = 0; \
break; \
} else
Criada pelo Nero_3D
Vocк tambйm pode ver o tуpico feito pelo DarKiNs clicando Aqui ele mostra resultados muito uteis, sendo que podemos usar funзхes mais rapidas e fazendo que o seu cуdigo fique mais optimizado.
Entгo foi isto pessoal, espero que tenham gostado.
Crйditos- ~BlueX
- ~Garfield
- Criador do tutorial da Operaзгo ternбria;
- ~Nero_3D
- Criador do marco para a benchmark;
- ~RyDeR`
- ~Shelby
- Criador do tutorial do rBitz;
- ~DarKiNs
- Criador do tуpico de optimizaзгo/benchmark;
- ~Slice
- Criador do tutorial do benchmark;
Re: Optimizaзхes -
zSuYaNw - 19.04.2012
Thanks for credits,
PS: i hate rBits.
Re: Optimizaзхes -
BillieJoe - 19.04.2012
Interessante, gostei
Re: Optimizaзхes -
Deanx - 19.04.2012
Muito bom esse tutorial
Re: Optimizaзхes - Moh_ - 19.04.2012
tuturial muito bom
sempre usei uma boa identaзao nos meus codigos.
й mais facil de ler e de perceber onde estгo os erros
jб agora obrigado pela benchmark. nгo conhecia essa e й sempre util para testes.
edit: nгo gosto de rbits e nao planeio usar.
o meu amx tem quase 3.8mb (tenho mais de 35 mil objetos)
Re: Optimizaзхes -
histire - 19.04.2012
Уtimo tutorial.
Re: Optimizaзхes -
Don_Speed - 19.04.2012
Deveria dar exemplos sobre string globais e locais.
Para que muita gente possa corrigir isso em GameModes.
Re: Optimizaзхes -
ViniBorn - 19.04.2012
Destaco tambйm que nгo й nada bom usar strings globais em format's contidos em funзхes chamadas por timers.
Isso porque se vocк tambйm a usa em um comando por exemplo, essa string pode ser formatada uma vez no comando, e logo em seguida na funзгo do timer.
Em outras palavras, poderб ocorrer a substituiзгo da mensagem do comando, pela 'mensagem' do timer.
Re: Optimizaзхes -
Ricop522 - 19.04.2012
Faltou falar que nгo se pode criar string global e depois dar strcat nela.
Re: Optimizaзхes -
4LiSs0N - 19.04.2012
Otimo Tuto.