2009-08-05 7 views

risposta

11

Il secondo mi sembra più chiaro in quanto mostra l'intento piuttosto che l'implementazione.

Dubito che ci siano molte situazioni in cui qualsiasi differenza di prestazioni farebbe qualche differenza notevole ed è probabilmente dipendente dall'implementazione.

+4

+1 su questo: con Math.max, le persone leggono il tuo codice ** immeditaly ** capisci cosa stai cercando di fare; con?:, dovranno pensare almeno per uno o due secondi ... Se hai 300 righe di codice, è già un paio di minuti persi a pensare con probabilmente nessuna buona ragione (tranne in alcune parti davvero critiche del tuo applicazione, questo tipo di micro-ottimizzazione è probabilmente inutile) - chi ha detto qualcosa sull'ottimizzazione prematura e sulla radice di tutto il male? ^^ –

+0

Penso che fosse donald knuth – Breton

+2

Questo è in realtà un fattore quando si attraversano oggetti Float32Array a 130 MB. –

1

Per la velocità, non vi è alcuna differenza significativa.

Per lo stile, Math.max è molto più leggibile e quindi l'opzione migliore.

0

Math.max() fa esattamente la stessa cosa che hai scritto prima. Usa l'operatore ternario per restituire il massimo. Quindi, se vuoi risparmiare qualche nanosecondo, puoi usare la prima, per evitare una chiamata a una funzione. Tuttavia, IMHO, questa differenza non può davvero influire sulle prestazioni, a meno che tu non abbia un mucchio di Math.max da fare.

3

Su mono, il JIT può eseguire i metodi Math.Min e Math.Max ​​inline e fornire prestazioni migliori rispetto alle implementazioni inline personalizzate. Userà istruzioni speciali se disponibili dall'hardware. Quindi un giorno se in JavaScript c'è qualche JIT (Google V8?) Probabilmente ci saranno dei benefici in termini di prestazioni per la classe Math dell'utente.

6

In base a questo test jsperf, un'istruzione if è la più performante.

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

Tuttavia, sono d'accordo che Math.max/Math.min è più leggibile.

+0

Grazie. Usando il tuo test ho ottenuto questi risultati: 'function' -> 7% più lento,' Math.min' -> 1% più lento, 'if' -> più veloce. – Luke