¿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.

Author: João Pinto Jerónimo, 2012-08-22

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.

 28
Author: Nathan MacInnes,
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:

Rendimiento raw vs minificado

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

 25
Author: le_m,
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:

Un rápido consejo de optimización

Prueba ejecutada el 3 de febrero de 2017

 2
Author: Manuel K.,
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

 2
Author: Greg,
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