Lua innere Funktion vs Modulebene Funktion

8

Für eine Funktion innerhalb einer anderen Funktion "instanziiert" Lua die innere Funktion bei jedem Aufruf der äußeren Funktion? Wenn ja, würde bar() im folgenden Code schlechter sein als foo() ?

%Vor%     
johncage 22.05.2011, 09:09
quelle

3 Antworten

15

Testfall 1: a und b beide global, keine Einbettung.

%Vor%

Benutzerzeit: 1.74s .

Testfall 2: a local, b global, keine Einbettung.

%Vor%

Benutzerzeit 1.39s .

Testfall 3: a und b beide lokal, keine Einbettung.

%Vor%

Benutzerzeit 1,2 s .

Testfall 4: a eingebettet in b , a global, b lokal.

%Vor%

Benutzerzeit: 2.79s . (!)

Testfall 5: a eingebettet in b , beide lokal.

%Vor%

Benutzerzeit: 2.53s .

Zusammenfassung der Ergebnisse:

  1. Es ist einfach, Tests zu schreiben, um Intuitionen über die Leistung zu bestätigen oder zu leugnen. Sie sollten dies wahrscheinlich tun, anstatt sich auf Crowdsourcing zu verlassen. (Die Menge ist oft falsch, weißt du.)
  2. Funktionen lokal statt global zu machen, hat einen signifikanten positiven Einfluss auf den Funktionsaufruf-Overhead. (Etwa 30% besser in diesen Testfällen, wenn beide Funktionen lokal waren.)
  3. Das Einbetten einer Funktion in eine andere Funktion hat einen schwerwiegenden negativen Einfluss auf den Funktionsaufruf-Overhead. (Etwa 110% schlechter in diesen Testfällen, wenn beide Funktionen lokal waren.)
  4. Habe ich schon erwähnt, dass Testen wahrscheinlich eine gute Idee ist, um der Menge zu vertrauen?
JUST MY correct OPINION 22.05.2011, 09:50
quelle
5

bar wird langsamer, weil Sie jedes Mal ein neues Funktionsobjekt erstellen. Wenn Sie Funktionen innerhalb einer Funktion deklarieren möchten, möchten Sie wahrscheinlich eine Schließung zurückgeben.

%Vor%     
ponzao 22.05.2011 09:47
quelle
0
Roberto hat ein ziemlich umfassender Artikel zu Lua Performance-Tipps wie diesem.

    
Stuart P. Bentley 23.05.2011 19:18
quelle

Tags und Links