6 maneras fáciles de acelerar Express

Express es, con mucho, el marco web más popular para Node.js gracias a su API simple, complementos disponibles y una gran comunidad. Gracias a la comunidad, hay...

Introducción

Expresar es, con mucho, el marco web más popular para Node.js gracias a su API simple, complementos disponibles y una gran comunidad. Gracias a la comunidad, no hay escasez de documentación y ejemplos sobre cómo usar la API Express principal, lo cual es excelente, pero no siempre queda claro de inmediato cómo mejorar el rendimiento de su aplicación web a medida que crece. Aquí le mostraré algunas de las formas más fáciles y efectivas de mejorar el rendimiento de sus aplicaciones Express.

Compresión gzip

La compresión gzip no es nada nuevo para los servidores web, pero es algo fácil de olvidar, especialmente cuando estás acostumbrado a usar marcos que lo habilitan de forma predeterminada. Esta es una de esas mejoras que es extremadamente fácil de agregar y proporciona un gran aumento de rendimiento. Comprimir el contenido de su página puede reducir el tamaño de la página hasta en un 70%.

1
2
3
4
5
6
var compression = require('compression');
var express = require('express');

var app = express();

app.use(compression());

Ejecutar Express en modo de producción

De forma predeterminada, Express se ejecutará en modo de desarrollo, lo cual es fácil de pasar por alto, especialmente para aquellos que recién comienzan con Node.js/Express.

Entonces, ¿cuál es la diferencia entre el modo de producción y el de desarrollo de todos modos? Resulta que, en el modo de desarrollo, las plantillas de vista se leen de un archivo para cada solicitud, mientras que en el modo de producción, las plantillas se cargan una vez y se almacenan en caché. Esto se hace para que pueda realizar cambios fácilmente sobre la marcha sin tener que reiniciar la aplicación cada vez durante el desarrollo. Sin embargo, en un entorno de producción, esto puede reducir en gran medida su rendimiento, ya que tiene que lidiar con una E/S de archivo lenta en comparación con una RAM mucho más rápida.

Por suerte para usted, poner Express en modo de producción es fácil. Es solo una cuestión de establecer una variable de entorno.

1
$ export NODE_ENV=production

Sin embargo, tenga cuidado con este método. Si el servidor se reinicia, perderá esta variable de entorno y volverá a usar el modo de desarrollo. Una solución más permanente es configurar la variable dentro de su .bash_profile:

1
2
$ echo export NODE_ENV=production >> ~/.bash_profile
$ source ~/.bash_profile

Minimizar con Uglify

Para casi todos los sitios web, especialmente aquellos con mucho estilo y funcionalidad del lado del cliente, los activos estáticos pueden ser un gran lastre para el rendimiento. Tener que enviar varios archivos JavaScript y CSS para cada solicitud eventualmente pasa factura a su servidor, y eso ni siquiera tiene en cuenta el tiempo que el usuario tiene que esperar para que todas las solicitudes HTTP separadas finalicen en el lado del cliente.

Para ayudar a mitigar esto, puede usar un paquete de utilidades como Afear para minimizar y concatenar sus archivos JavaScript y CSS. Combine esto con un ejecutor de tareas como Gruñido y podrá automatizar fácilmente el proceso sin tener que preocuparse por ello. Un archivo Grunt bastante capaz (usando el complemento grunt-contrib-uglify) podría verse así:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
module.exports = function(grunt) {

    grunt.initConfig({
        uglify: {
            options: {
                banner: '/*! <%= pkg.name %> <%= grunt.template.today("dd-mm-yyyy") %> */\n'
            },
            dist: {
                files: {
                    'dist/<%= pkg.name %>.min.js': ['<%= concat.dist.dest %>']
                }
            }
        }
    });

    grunt.loadNpmTasks('grunt-contrib-uglify');
    grunt.registerTask('default', ['uglify']);
};

Reduzca su middleware

No estoy diciendo que nunca deba usar middleware, obviamente es necesario y hay muchas razones para usar middleware en sus aplicaciones Express, pero es fácil exagerar y copiar todo el middleware que ve que usan otras aplicaciones. . Revisa tu lista de dependencias y decide si realmente necesitas todo lo que tienes instalado (cookies, sesiones, i18n, registradores de solicitudes, etc.).

En algunos casos, solo necesita paquetes de middleware para el desarrollo, por lo que puede deshabilitarlos fácilmente en producción:

1
2
3
4
5
6
7
8
var express = require('express');
var debugMiddleware = require('my-debug-middleware');

var app = express();

if (process.env.NODE_ENV !== 'production') {
    app.use(debugMiddleware());
}

Aumentar Max Sockets

De forma predeterminada, el servidor HTTP de Node.js tiene un límite de grupo de sockets de solo 5. Este es un número muy conservador y la mayoría de los servidores pueden manejar una cantidad de sockets mucho mayor que esta.

Alternativamente, puede permitir tantos sockets como sea posible:

1
2
3
4
5
var http = require('http');
var https = require('https');

http.globalAgent.maxSockets = Infinity;
https.globalAgent.maxSockets = Infinity;

Editar: Esto solo se aplica a Node v0.10 y anteriores. A partir de la versión 0.12, maxSockets (tanto para http como https) se establece en Infinity.

Usar control de caché

Puede configurar un encabezado HTTP que le indicará al navegador del usuario que almacene en caché el contenido que acaba de recibir. Esta suele ser una buena idea para activos estáticos (JS, CSS, etc.) que cambian con poca frecuencia. Para asignar configuraciones de caché en toda la aplicación, use:

1
2
3
4
var express = require('express');
var app = express();

app.use(express.static(__dirname + '/public', { maxAge: 31557600 }));

Esto asignará la configuración de caché para todo en el directorio público. Para un control más detallado, puede configurar el almacenamiento en caché en función de solicitudes/rutas individuales:

1
2
3
4
5
6
7
var express = require('express');
var app = express();

app.get('/index.html', function (req, res) {
    res.setHeader('Cache-Control', 'public, max-age=86400');
    res.render('index.html');
});

Conclusión

Tenga en cuenta que puede encontrar excelentes consejos navegando en sitios web de código abierto, como la plataforma de blogs Fantasma. Estas aplicaciones son desarrolladas y utilizadas por miles de personas, por lo que generalmente puede encontrar algunos fragmentos útiles que de otra manera no escucharía.

Hay bastantes cosas que puede hacer fuera de Express para acelerar las cosas, así que si aún no lo ha hecho, consulte Redis, Nginx y otros mecanismos de almacenamiento en caché para impulsar su aplicación. Créeme, vale la pena tu tiempo.

¿Tienes más consejos de rendimiento de Express? ¡Cuéntanos en los comentarios!