2009-08-05 19 views

Respuesta

11

El segundo parece más claro para mí ya que muestra intención en lugar de implementación.

Dudo que haya muchas situaciones en las que cualquier diferencia en el rendimiento suponga una diferencia notable y, de todos modos, es probable que dependa de la implementación.

+4

+1 en eso: con Math.max, las personas que leen tu código ** immeditaly ** entienden lo que estás tratando de hacer; con?:, tendrán que pensar al menos durante uno o dos segundos ... Si tienes 300 líneas de código, ya está perdido un par de minutos pensando, probablemente sin una buena razón (excepto en algunas partes realmente críticas de tu aplicación, este tipo de micro-optimización es probablemente inútil) - ¿quién dijo algo acerca de la optimización prematura y raíz de todo mal? ^^ –

+0

Creo que fue donald knuth – Breton

+2

Esto es realmente un factor cuando se atraviesan 130MB objetos Float32Array. –

1

Por la velocidad, no hay una diferencia significativa.

Por estilo, Math.max es mucho más legible y por lo tanto la mejor opción.

0

Math.max() actúa exactamente igual que lo que escribió primero. Utiliza el operador ternario para devolver el máximo. Entonces, si desea ahorrar un nanosegundo, puede usarlo de la primera manera, para evitar una llamada a una función. Sin embargo, en mi humilde opinión, esta diferencia realmente no puede afectar el rendimiento, a menos que tenga un montón de Math.max por hacer.

3

En mono el JIT puede alinear los métodos Math.Min y Math.Max ​​y proporcionar un mejor rendimiento en comparación con las implementaciones personalizadas y en línea. Utilizará instrucciones especiales si está disponible por el hardware. Así que un día si en JavaScript hay algo de JIT (Google V8?) Probablemente será un beneficio de rendimiento para la clase de matemáticas de usuario.

6

De acuerdo con esta prueba jsperf, una declaración if es la más eficiente.

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

Sin embargo, estoy de acuerdo en que Math.max/Math.min es más fácil de leer.

+0

Gracias. Usando su prueba obtuve estos resultados: 'función' -> 7% más lento,' Math.min' -> 1% más lento, 'si' -> más rápido. – Luke

1

Aquí está una prueba JSPerf que le permite probarlo en su navegador (s):

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

Mis pruebas en varios navegadores indican que Math.min, el operador ternario y una sentencia if funcionan de manera similar.