world with tutorial starting start node hello guide docs create app javascript node.js minify google-closure-compiler uglifyjs

javascript - with - ¿Tiene sentido minificar el código utilizado en NodeJS?



node js start a project (4)

En el nodo, el costo principal de procesamiento son las operaciones de E / S, no el propio JavaScript. Así por ejemplo:

fs.readFile(myFile, function (err, data) { processTheFile(data); });

Aquí, la brecha entre invocar readFile y la devolución de llamada será varias veces más larga que la duración de la devolución de llamada. (Si es al revés, probablemente no deberías estar usando un nodo).

Así que optimizar el processTheFile función de processTheFile para la velocidad no tiene sentido, porque está guardando un pequeño porcentaje de un número muy pequeño.

Me preguntaba, dado que Clojure Compiler 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 prioridad principal), mi aplicación node.js se ejecutaría más rápido si se minimizara? Sé que puede depender de la aplicación, pero estoy preguntando esto en general.


La minificación puede mejorar el rendimiento.

El compilador de optimización V8 de Node incorpora funciones de acuerdo con algunas heurísticas. La minificación influye en estas heurísticas. Esto puede causar la alineación de funciones que anteriormente no estaban en línea. Como las funciones en línea generalmente se realizan más rápido, esto puede conducir a mejoras en el rendimiento.

Nodo 9.0+ / V8 6.2+ (Turbofan): mejoras menores en el rendimiento

Si el tamaño de bytecode no optimizado de la función es inferior a 500, estará en línea. La minificación generalmente reduce el recuento de nodos AST (Árbol de sintaxis abstracta). Como bytecode se genera directamente desde AST, también podemos esperar cierta reducción en el tamaño del bytecode.

Fuente: [Turbofan] Use el tamaño del bytecode para resumir la heurística.

Nodo 8.3+ / V8 5.9+ (Turbofan) → mejoras menores en el rendimiento

Si el recuento de nodos AST de la función es inferior a 196, estará en línea. La minificación generalmente reduce el conteo de nodos AST.

Fuente: [turboventilador] No tome en cuenta el tamaño de la fuente para resumir la heurística.

Nodo 8.2 y antes / V8 5.8 (cigüeñal) y antes → importantes mejoras de rendimiento

Si el recuento de caracteres de la función, incluidos el espacio en blanco y los comentarios, es inferior a 600 , estará en línea.

Digamos que tenemos una función que tiene más de 600 caracteres de longitud:

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 reducción lo reduce a la function f(){return 1} .

Si ahora llamamos a las dos variantes n veces y comparamos el rendimiento de las funciones raw y minified , obtenemos el siguiente resultado:

Obviamente, la función minimizada realiza más del doble de rápido.

Ver también: #NodeJS: un consejo de optimización rápida