Optimizacija.

Započeo [ED] ZicMortal, Jun 02, 2010, 14:11:04 POSLE PODNE

prethodna tema - sledeća tema

0 članova i 3 gostiju pregledaju ovu temu.

Evo molim pomoc u vezi ove teme. Ja uobicajeno skriptam na obican nacin. Na godfather nacin. Ubacijem nesto svoje, radim dosta svojega ali neznam puno o optimizaciji moda. Zelim da mi server manje lagga, u bilo kojem pogledu (to ne znaci da on lagga), nego jednostavno da bude bolji.

Sad to je pitanje za one iskusnije skriptere. Kako mogu optimizirati mode? Znam da se moze pomocu dcmd, zcmd... ali kako jos?
Respekt: [H]265, John, [03]Garsino, LordShigi, Dujma, Carlsson, Randy, Jacobs, Hu5o, Toni, Lukas, Curtis, Ivo, Hawks, Jack, Koksildo, gonss

Haha OMG => http://zaslike.com/files/9rd5urq94yqagvdsx3i.png [ovo nema nigdje]

Correlli

Prestani koristiti 256 stanica za formatirane poruke koje koriste SendClientMessage / SendClientMessageToAll jer SA:MP MAX_IO je 128 a ne 256, i za sva ostala polja za koja ti ne trebaju te stanice.

Koristi makroje.

Ne koristi previše tajmera, koristi zcmd + sscanf2 plugin za komande.

Koristi plugin-streamer za sve što trebaš (objekti, map ikone, 3d tekstovi, ..).

Pazi kako koristiš for/while loopove (naprimjer: ako imaš u skripti samo 200 vozila i ako koristiš MAX_VEHICLES za polja i za loopove onda to nije dobro, jer MAX_VEHICLES je definiran kao 2000). Možeš koristiti foreach za ovo ili re-definirati na svoj broj:
#undef MAX_VEHICLES
#define MAX_VEHICLES (200)
ili jednostavno otvoriš a_samp.inc include file i potražiš "MAX_VEHICLES" i promijeniš, ali to će utjecati na svaku skriptu za koju budeš koristio taj include file.

Koristi foreach funkciju koju je napravio Y_Less, tako ne trebaš koristiti ni MAX_PLAYERS ni GetMaxPlayers() u loopovima.
Ova koda:
for(new u = 0; u < MAX_PLAYERS; u++)
{
   if(IsPlayerConnected(u))
   {
       SendClientMessage(u, 0xFFFFFFFF, "Tekst.");
       mojaFunkcija(u);
   }
}

će postati ovakva:
foreach(Player, u)
{
   SendClientMessage(u, 0xFFFFFFFF, "Tekst.");
   mojaFunkcija(u);
}
(ne treba ti ni IsPlayerConnected provjera jer to je već automatsko u foreach funkciji)

I proćitaj ovo:
http://forum.sa-mp.com/index.php?topic=79810.0
Poslednja Izmena: Jun 02, 2010, 15:43:18 POSLE PODNE od Don Correlli

ako imas macro slican:

#define SOME_STRING "ThisIsString"

i ako ga koristis vise od jednog puta, bolje ti je koristiti:

new const SOME_STRING[] = "ThisIsString";

Sad da objasnjavam zasto nebi skuzio nitko, ali ovo primjeni ako imas tako.

Macro-i su dvosjekli mac:
npr.


#define DO_ADD(%1, %2) ((%1)+(%2))

i sada koristis

new i = 0;
while(i < 500)
{
    result += DO_ADD(i++, i++)
}

akcija koja ce se dogoditi je tzv. "undefined behaviour" tj. ne zna se.

Ali opet u nekim situacijama nesto i pomaze jer smanjuje vrijeme potrebno za izvrsavanje koda(dok bi pozivanja funkcije oduzelo nesto vremena).

sto biste jos preporucili za optimizaciju moda i samnjivanje laga?



Citat: [BU]Gigi-The-Beast poslato Jun 04, 2010, 23:52:51 POSLE PODNE
sto biste jos preporucili za optimizaciju moda i samnjivanje laga?
Da napravis tzv. Unit Testing te vidis koji ti je dio skripte najsporiji, takoder eliminiraj nepotrebne loopove.

Hvala pomoc ce i meni to :P
Mysterious roleplay

Correlli

Citat: JoeBullet v2.1 poslato Jun 04, 2010, 23:41:46 POSLE PODNE
Sad da objasnjavam zasto nebi skuzio nitko
Au, vidi Joa, samo on pametan pa zna šta to znači znači, a svi ostali su gl*pi na ovom forumu.

Nemaš tu šta za skužit, samo otvori pawn-lang.pdf i proćitaj objašnjenje ili pogledaj direktno ovdje.
Poslednja Izmena: Jun 05, 2010, 10:24:22 PRE PODNE od Don Correlli