Was ist schneller? Eine leere Funktion ausführen oder prüfen, ob die Funktion undefiniert ist? [geschlossen]

Ich habe Code geschrieben, in dem eine als Argument übergebene Funktion manchmal undefiniert ist. Als ich neugierig auf diese schlechte "Übung" war, fragte ich mich, was eigentlich schneller ist. Geben Sie eine leere Funktion oder lassen Sie die Funktion prüfen, ob das Argument undefiniert war?

Ich habe den folgenden Test gemacht, um es zu versuchen. Die Antwort war sehr überraschend!

var timesTest = 1000;

function empty(){}
console.time('running an empty function');
for( var i=0; i<timesTest; i++ ){
  empty();
}
console.timeEnd('running an empty function');

var somethingthatdoesnotexist;
console.time('checking if a function exists');
for( var i=0; i<timesTest; i++ ){
  if( somethingthatdoesnotexist ){
    somethingthatdoesnotexist();
  }
}
console.timeEnd('checking if a function exists');

// results:
// running an empty function: 0.103ms
// checking if a function exists: 0.036ms

Bei niedrigen Zahlen ist die Überprüfung auf undefinierte Argumente viel schneller.

Interessant wird es, wenn die Testzeit zunimmt.

// var timesTest = 100000;
// results:
// running an empty function: 1.125ms
// checking if a function exists: 1.276ms 

und

// results:
// var timesTest = 1000000000;
// running an empty function: 2096.941ms
// checking if a function exists: 2452.922ms 

Mit zunehmender Anzahl von Tests wird die Ausführung einer Leerfunktion um einiges schneller.

Ich habe noch nicht versucht, dies in einem Diagramm darzustellen, aber ich bin gespannt auf dieses Verhalten. Weiß jemand warum das so ist? Wie wirkt sich das auf die Dinge im Code der realen Welt aus?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage