×

Langue

Fermer
Atelier 801
  • Forums
  • Dev Tracker
  • Connexion
    • English Français
      Português do Brasil Español
      Türkçe Polski
      Magyar Română
      العربية Skandinavisk
      Nederlands Deutsch
      Bahasa Indonesia Русский
      中文 Filipino
      Lietuvių kalba 日本語
      Suomi עברית
      Italiano Česky
      Hrvatski Slovensky
      Български Latviešu
      Estonian
  • Langue
  • Forums
  • /
  • Transformice
  • /
  • Modules
  • /
  • [Poradnik] Optymalizacja skryptów Lua
[Poradnik] Optymalizacja skryptów Lua
Sebafrancuz
« Consul »
1500633420000
    • Sebafrancuz#0000
    • Profil
    • Derniers messages
    • Tribu
#1
  8
  • Główna
  • Pętla for i tabela
  • Zmienne lokalne vs globalne
  • Algorytmy
  • Iteracja vs Rekurencja
W tym poradniku pokażę Wam, jak optymalizować kod (robić go szybszym) oraz pokażę przykłady jak działają (w jakim czasie).

Wątek będzie edytowany!

Code Lua

1
2
3
4
5
6
7
a = {};
start = os.time();
for i = 1, 1000000 do
a[i] = i;
end
stop = os.time();
print((stop-start)/1000);

Wynik: 0.192

Code Lua

1
2
3
4
5
6
7
a = {};
start = os.time();
for i = 1, 1000000 do
a[#a+1] = i;
end
stop = os.time();
print((stop-start)/1000);

Wynik: 0.364

Podsumowanie:
Jak sami widzicie w pętli "for" lepiej (szybciej) jest wykorzystywać a[i] (w tym przypadku i, bo dałem "for i =n, m do") niż a[#a+1].
Generalnie zmienne lokalne są szybsze niż globalne, niestety nie mogę stworzyć przykładu (z czasem), bo są to bardzo małe różnice (w których jedna ms nie wystarczy, aby porównać).

Przykład zmiennej globalnej:
Code Lua

1
2
3
4
a = 5;
function b()
print(a);
end

Przykład zmiennej lokalnej:
Code Lua

1
2
3
4
function b()
local a = 5;
print(a);
end
Code Lua

1
2
3
4
5
6
7
8
a = {};

start = os.time();
for i = 1, 1000000 do
a[i] = i/3;
end
stop = os.time();
print((stop-start)/1000);

Wynik: 0.089

Code Lua

1
2
3
4
5
6
7
8
a = {};

start = os.time();
for i = 1, 1000000 do
a[i] = i*(1/3);
end
stop = os.time();
print((stop-start)/1000);

Wynik: 0.171

Podsumowanie:
Jak sami widzicie, mnożenie liczby n * (1/3) jest o wiele wolniejsze niż podzielenie n/3.
Rekurencja:
Code Lua

1
2
3
4
5
function silnia_rekurencja(n)
if (n==0) then return 1;
else return n * silnia_rekurencja(n-1);
end
end


Iteracja:
Code Lua

1
2
3
4
5
6
7
8
function silnia_iteracja(n)
wynik = 1;
while (n>0) do
wynik = wynik * n;
n = n - 1;
end
return wynik;
end


Iteracja zdecydowanie jest szybsza (i zajmuje zdecydowanie mniej RAM) niż rekurencja, mimo że rekurencja jest bardziej czytelna i może się wydawać że tworzy mniej obliczeń (co wcale prawdą nie jest).

Dernière modification le 1501246620000
Nat_a
« Consul »
1500633540000
    • Nat_a#9157
    • Profil
    • Derniers messages
#2
  6
Powodzenia w prowadzeniu tego wątku!
//i tak nic z tego nie kumam

Dernière modification le 1500633660000
Luna1928
« Consul »
1500636660000
    • Luna1928#0000
    • Profil
    • Derniers messages
    • Tribu
#3
  2
What?
Powodzenia w wątku
A_rek
« Sénateur »
1500637320000
    • A_rek#0000
    • Profil
    • Derniers messages
#4
  2
wątek fajny ale po co go robisz to ja nie wiem, zwykły śmiertelnik tego nie użyje bo nie ma do tego uprawnień
Sebafrancuz
« Consul »
1501246680000
    • Sebafrancuz#0000
    • Profil
    • Derniers messages
    • Tribu
#5
  2
Aktualizacja wątku:
Dodano nowe porównanie (Rekurencja vs Iteracja)
Rkubi
« Censeur »
1501248120000
    • Rkubi#0000
    • Profil
    • Derniers messages
    • Tribu
#6
  6
Dobry i przydatny wątek, dobra robota!
Imyoda
« Censeur »
1501333980000
    • Imyoda#0000
    • Profil
    • Derniers messages
#7
  0
Szeldo a dit :
wątek fajny ale po co go robisz to ja nie wiem, zwykły śmiertelnik tego nie użyje bo nie ma do tego uprawnień

LUA NIE JEST DLA TAKICH PLEBSÓW JAK MY!11!!!!
Mlekowaty
« Consul »
1501579140000
    • Mlekowaty#4870
    • Profil
    • Derniers messages
    • Tribu
#8
  0
Rkubi a dit :
Dobry i przydatny wątek, dobra robota!

Dobry tak przydatny? mało osób zna lua
Kickaricka3
« Consul »
1686831960000
    • Kickaricka3#9256
    • Profil
    • Derniers messages
    • Tribu
#9
  0
Powodzenia!
  • Forums
  • /
  • Transformice
  • /
  • Modules
  • /
  • [Poradnik] Optymalizacja skryptów Lua
© Atelier801 2018

Equipe Conditions Générales d'Utilisation Politique de Confidentialité Contact

Version 1.27