In JavaScript, è meglio fare questo:velocità e lo stile di Math.max vs operatore ternario in JavaScript
var h = th > ch ? th : ch;
o
var h = Math.max(th, ch);
?
In JavaScript, è meglio fare questo:velocità e lo stile di Math.max vs operatore ternario in JavaScript
var h = th > ch ? th : ch;
o
var h = Math.max(th, ch);
?
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.
+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? ^^ –
Penso che fosse donald knuth – Breton
Questo è in realtà un fattore quando si attraversano oggetti Float32Array a 130 MB. –
Per la velocità, non vi è alcuna differenza significativa.
Per lo stile, Math.max è molto più leggibile e quindi l'opzione migliore.
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.
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.
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.
Grazie. Usando il tuo test ho ottenuto questi risultati: 'function' -> 7% più lento,' Math.min' -> 1% più lento, 'if' -> più veloce. – Luke
Ecco un test JSPerf, che consente di provare sul vostro browser (s):
http://jsperf.com/math-min-vs-if-condition-vs/13
miei test su diversi browser indicano che Math.min, l'operatore ternario e un'istruzione if eseguire in modo simile.
Se non altro, per semplici domande di velocità hai sempre la possibilità di metterlo alla prova nelle tue mani. – Amber