Introducción
Contenido
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.
Te puede interesar:Ejecutar tareas periódicas en Node con node-cronEntonces, ¿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.).
Te puede interesar:Cómo programar un Arduino con JavaScriptEn 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:
Te puede interesar:Clases de ES6var 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!
Te puede interesar:Evitar el infierno de devolución de llamada en Node.js