6 maneras f谩ciles de acelerar Express

    Introducci贸n

    R谩pido es, con mucho, el marco web m谩s popular para Node.js gracias a su API simple, plugins 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 genial, pero no siempre est谩 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 la habilitan de forma predeterminada. Esta es una de esas mejoras que es extremadamente f谩cil de agregar y proporciona un gran impulso al rendimiento. Comprimir el contenido de su p谩gina puede reducir el tama帽o de la p谩gina hasta en un 70%.

    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 que 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. En un entorno de producci贸n, sin embargo, esto puede reducir enormemente su rendimiento, ya que tiene que lidiar con IO de archivos lentos en comparaci贸n con una RAM mucho m谩s r谩pida.

    Por suerte para ti, hacer que Express entre en modo de producci贸n es f谩cil. Es solo cuesti贸n de establecer una variable de entorno.

    $ 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 establecer la variable dentro de su .bash_profile:

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

    Minifica 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 m煤ltiples archivos JavaScript y CSS para cada solicitud eventualmente pasa factura a su servidor, y eso sin siquiera considerar el tiempo que el usuario tiene que esperar a que finalicen todas las solicitudes HTTP separadas en el lado del cliente.

    Para ayudar a mitigar esto, puede usar un paquete de utilidades como Afear para minificar y concatenar sus archivos JavaScript y CSS. Combine esto con un corredor 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 gru帽ido-contrib-uglify plugin) podr铆a verse as铆:

    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 debas usar middleware, obviamente es necesario y hay muchas razones para usar middleware en tus aplicaciones Express, pero es f谩cil exagerar y copiar todo el middleware que ves que usan otras aplicaciones. Revise su lista de dependencias y decida si realmente necesita todo lo que tiene 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:

    var express = require('express');
    var debugMiddleware = require('my-debug-middleware');
    
    var app = express();
    
    if (process.env.NODE_ENV !== 'production') {
    	app.use(debugMiddleware());
    }
    

    Aumentar los enchufes m谩ximos

    De forma predeterminada, el servidor HTTP 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 un n煤mero mucho mayor de sockets que este.

    Alternativamente, puede permitir tantos sockets como sea posible:

    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 (para ambos http y https) se establece en Infinity.

    Usar Cache-Control

    Puede establecer un encabezado HTTP que le dir谩 al navegador del usuario que almacene en cach茅 el contenido que acaba de recibir. Suele ser una buena idea para los activos est谩ticos (JS, CSS, etc.) que cambian con poca frecuencia. Para asignar configuraciones de cach茅 en toda la aplicaci贸n, use:

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

    Esto asignar谩 la configuraci贸n de la cach茅 para todo en el public directorio. Para un control m谩s detallado, puede configurar el almacenamiento en cach茅 en funci贸n de solicitudes / rutas individuales:

    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 por sitios web de c贸digo abierto, como el Fantasma plataforma de blogs. Estas aplicaciones son desarrolladas y utilizadas por miles de personas, por lo que generalmente puede encontrar algunos fragmentos 煤tiles de los que no oir铆a hablar de otra manera.

    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 darle un impulso a su aplicaci贸n. Cr茅ame, vale la pena su tiempo.

    驴Tiene m谩s consejos de rendimiento Express? 隆H谩znoslo saber en los comentarios!

     

    Etiquetas:

    Deja una respuesta

    Tu direcci贸n de correo electr贸nico no ser谩 publicada. Los campos obligatorios est谩n marcados con *