2009-08-05 10 views

Antwort

11

Die zweite scheint mir klarer zu sein, da sie eher Absicht als Umsetzung zeigt.

Ich bezweifle dort sehr viele Situationen, in denen irgendein Leistungsunterschied irgendeinen bemerkbaren Unterschied machen würde und es wahrscheinlich sowieso Implementierung abhängig ist.

+4

+1 auf das: mit Math.max, Menschen lesen Ihren Code ** sofort ** verstehen, was Sie zu tun versuchen; mit?:, müssen sie mindestens für ein oder zwei Sekunden denken ... Wenn Sie 300 Zeilen Code haben, ist es schon ein paar Minuten verlorenes Denken mit wahrscheinlich keinen guten Grund (außer in einigen wirklich kritischen Teilen Ihres Anwendung, diese Art von Mikro-Optimierung ist wahrscheinlich sinnlos) - Wer hat etwas über vorzeitige Optimierung und die Wurzel allen Übels gesagt? ^^ –

+0

Ich denke, das war Donald Knuth – Breton

+2

Dies ist tatsächlich ein Faktor, wenn Sie 130MB Float32Array Objekte durchlaufen. –

1

Für die Geschwindigkeit gibt es keinen signifikanten Unterschied.

Für Stil, Math.max ist viel besser lesbar und daher die beste Option.

0

Math.max() verhält sich genauso wie Sie zuerst geschrieben haben. Es verwendet den ternären Operator, um die max. Wenn Sie also einige Nanosekunden sparen möchten, können Sie den ersten Weg nutzen, um einen Aufruf an eine Funktion zu vermeiden. Allerdings, IMHO, dieser Unterschied kann die Leistung nicht wirklich beeinflussen, es sei denn, Sie haben einen Haufen Math.max zu tun.

3

Auf Mono kann das JIT die Math.Min- und Math.Max-Methoden inline einbinden und bietet eine bessere Leistung als benutzerdefinierte Inline-Implementierungen. Es wird spezielle Anweisungen verwenden, wenn sie von der Hardware verfügbar sind. Wenn eines Tages JavaScript in JIT (Google V8?) Ist, wird es wahrscheinlich einen Leistungsvorteil für die Benutzer-Math-Klasse geben.

6

Gemäß diesem Jsperf-Test ist eine if-Anweisung am leistungsfähigsten.

http://jsperf.com/math-min-vs-if-condition-vs/2

Allerdings habe ich damit einverstanden, dass Math.max/Math.min mehr lesbar ist.

+0

Danke. Mit Ihrem Test habe ich diese Ergebnisse erhalten: 'function' -> 7% langsamer,' Math.min' -> 1% langsamer, 'if' -> am schnellsten. – Luke

1

Hier ist ein JSPerf Test, der Sie es in Ihrem Browser (n) testen können:

http://jsperf.com/math-min-vs-if-condition-vs/13

Meine Tests auf verschiedenen Browsern zeigen, dass Math.min, der ternäre Operator und eine if-Anweisung in ähnlicher Weise durchführen.

Verwandte Themen