Para todos: Esto tiene más la sensación de un "comentario". Admitido. Elegí usar el espacio de una "respuesta". Por favor tolera.
@StefanoFratini: Por favor tome mi nota como basándose en su trabajo. Quiero evitar ser crítico.
Aquí hay dos maneras de mejorar aún más el código en tu post:
- Use las dos mitades de la tupla que viene de process.hrtime(). Devuelve una matriz [segundos, nanosegundos]. Su código usa la parte nanosegundos de la tupla (elemento 1) y no puedo encontrar que use la parte de segundos (elemento 0).
- Sea explícito acerca de las unidades.
¿Puedo encontrar mi brazalete? No sé. Aquí hay un desarrollo del código de Stephano. Tiene defectos; No me sorprendería si alguien me lo cuenta. Y eso estaría bien.
"use strict";
var a = function(val) { return val+1; }
var b = function(val) { return val-1; }
var c = function(val) { return val*2 }
var time = process.hrtime();
var reps = 100000000
for(var i = 0; i < reps; i++) { a(b(c(100))); }
time = process.hrtime(time)
let timeWith = time[0] + time[1]/1000000000
console.log(`Elapsed time with function calls: ${ timeWith } seconds`);
time = process.hrtime();
var tmp;
for(var i = 0; i < reps; i++) { tmp = 100*2 - 1 + 1; }
time = process.hrtime(time)
let timeWithout = time[0] + time[1]/1000000000
console.log(`Elapsed time without function calls: ${ timeWithout } seconds`);
let percentWith = 100 * timeWith/timeWithout
console.log(`\nThe time with function calls is ${ percentWith } percent\n` +
`of time without function calls.`)
console.log(`\nEach repetition with a function call used roughly ` +
`${ timeWith/reps } seconds.` +
`\nEach repetition without a function call used roughly ` +
`${ timeWithout/reps } seconds.`)
Es claramente un descendiente del código de Stephano. Los resultados son bastante diferentes.
Elapsed time with function calls: 4.671479346 seconds
Elapsed time without function calls: 0.503176535 seconds
The time with function calls is 928.397693664312 percent
of time without function calls.
Each repetition with a function call used roughly 4.671479346e-8 seconds.
Each repetition without a function call used roughly 5.0317653500000005e-9 seconds.
Al igual que Stephano, utilicé Win10 and Node (v6.2.0 para mí).
que reconocen los argumentos que
- "Para ponerlo en perspectiva, en un nanosegundo (una mil millonésima, 1e-9), la luz viaja aproximadamente 12 pulgadas."
- "Estamos hablando solo de pequeños números de nanosegundos (47 a 5), entonces ¿a quién le importan los porcentajes?"
- "Algún algoritmo genera millones de llamadas a función cada segundo, por lo que se suma a ellas".
- "La mayoría de nosotros, los desarrolladores, no trabajamos con esos algoritmos, por lo que preocuparse por la cantidad de llamadas a funciones es contraproducente para la mayoría de nosotros".
Voy a colgar mi sombrero en el argumento económico: Mi computadora y la anterior cada uno cuestan menos de $ 400 (EE.UU.). Si un ingeniero de software gana entre $ 90 y $ 130 por hora, el valor de su tiempo para sus jefes es en una proporción de una computadora como la mía a tres o cuatro horas de trabajo. En ese entorno:
¿Cómo se compara eso con los dólares por hora que una empresa pierde cuando el software que necesita deja de funcionar?
¿Cómo se compara eso con la pérdida de la buena voluntad y el prestigio cuando un cliente que paga temporalmente no puede usar el software empaquetado producido por un socio comercial?
Hay muchas otras preguntas similares. Los omitiré.
Como interpreto las respuestas: La legibilidad y la capacidad de mantenimiento reinan sobre el rendimiento de la computadora. ¿Mi consejo? Escriba la primera versión de su código en consecuencia. Muchas personas a las que respeto dicen que las funciones cortas ayudan.
Una vez que termine su código y no le gusta el rendimiento, encuentre los puntos de estrangulación. Muchas personas que respeto dicen que esos puntos son nunca donde los habría esperado. Trabaja cuando los conozcas.
Por lo tanto, ambos lados tienen razón. Algunos.
Yo? Supongo que me iré a alguna parte. Dos centavos.
No he visto esa charla, pero si hablamos de micro-optimización, simplemente haga lo que le resulte más cómodo. Si te gusta funcional, entonces ve con él. Si eres una biblioteca de clase más grande también está bien. No creo que haga una gran diferencia para realmente tomar uno sobre el otro. De todos modos, pueden surgir otros problemas en diferentes situaciones, por lo que se compensan entre sí. – elclanrs
Lo que estás preguntando es esencialmente "cómo escribir un buen programa", uno que a) es legible, pero b) funciona bien. No hay una receta definitiva, es por eso que los programadores todavía tenemos nuestro pan y mantequilla. – georg
Gracias a todos. – Nick