¿Tiene sentido reducir el código utilizado en NodeJS?
Me preguntaba, ya que el compilador Clojure y UglifyJS no solo optimizan el código para el tamaño, sino también para el rendimiento (aunque creo que el tamaño es la principal prioridad), sería mi nodo.la aplicación js se ejecuta más rápido si se minimiza ? Sé que puede depender de la aplicación, pero estoy preguntando esto en general.
4 answers
En node, el principal costo de procesamiento son las operaciones de E/S, no el propio JavaScript. Por ejemplo:
fs.readFile(myFile, function (err, data) {
processTheFile(data);
});
Aquí, el espacio entre llamar a readFile
y la devolución de llamada que se está disparando será varias veces más largo que el tiempo que tarda la devolución de llamada. (Si es al revés, probablemente no deberías usar node.)
Así que optimizar la función processTheFile
para la velocidad no tiene sentido, porque estás ahorrando un pequeño porcentaje de un número muy muy pequeño.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-08-22 08:26:18
La minificación puede mejorar el rendimiento.
El compilador de optimización V8 de Node inlines funciona de acuerdo con algunas heurísticas. La minificación influye en estas heurísticas. Esto puede causar la inserción de funciones no insertadas anteriormente. Dado que las funciones en línea generalmente funcionan más rápido, esto puede conducir a mejoras de rendimiento.
Nodo 9.0 + / V8 6.2 +(Turbofan) - mejoras de rendimiento menores
Si el tamaño de bytecode no optimizado de la función es menor que 500, se insertará. La minificación generalmente reduce el recuento de nodos AST (Abstract Syntax Tree). Dado que el bytecode se genera directamente desde el AST, también podemos esperar una reducción en el tamaño del bytecode.
Fuente: [Turbofan] Utilice el tamaño de bytecode para la heurística de inserción.
Nodo 8.3 + / V8 5.9 + (Turbofan) → mejoras menores de rendimiento
Si el recuento de nodos AST de la función es inferior a 196, se insertará en línea. La minificación generalmente reduce el nodo AST contar.
Fuente: [turbofan] No tenga en cuenta el tamaño de la fuente para la heurística de inserción.
Nodo 8.2 y antes / V8 5.8 (Cigüeñal) y antes → principales mejoras de rendimiento
Si el número de caracteres de la función, incluidos los espacios en blanco y los comentarios, es inferior a 600, se insertará.
Digamos que tenemos una función que tiene más de 600 caracteres de largo:
function f() {
// A long comment... bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
return 1;
}
La minificación reduce esto a function f(){return 1}
.
Si ahora llame a ambas variantes n veces y compare el rendimiento de la función raw y la función minified , obtenemos el siguiente resultado:
Obviamente, la función minificada realiza más de dos veces tan rápido.
Ver también: #NodeJS: Un consejo rápido de optimización
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-06 03:41:12
Basado en los siguientes dos enlaces tiene mucho sentido:
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-03 17:59:10
Ya no es cierto.
Sí, Node6 ahora está basado en v8 5.1, que usa TurboFan. Como el equipo v8 declarado ( https://bugs.chromium.org/p/v8/issues/detail?id=3354 ) se ha eliminado el disparador de conteo de caracteres para la inserción.
Https://medium.com/@c2c/yes-node6-is-now-based-on-v8-5-1-7a645eb9992b https://bugs.chromium.org/p/v8/issues/detail?id=3354
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-11 01:54:37