提升Express(Node.js)框架运行速度方法汇总|Express性能优化

 

简介

Express 是目前为止最流行的Node web框架。这往往得益于它简单的API、可用的插件和庞大的社区。通过社区,使用核心的Express API的文档和示例就显得非常的方便,但是随着web应用程序的增长,如何提高其性能并不总是清晰明了能查询到,解决掉。这里,简单的介绍一些提高Express应用程序性能的最简单、最有效的方法

提升Express(Node.js)框架运行速度方法汇总|Express性能优化 - 豆豆网

提升Express(Node.js)框架运行速度方法汇总|Express性能优化

Express优化提速方法:

1、gzip压缩

gzip压缩对于web服务器来说并不是什么新疑技术,但是它很容易被我们忘记,特别是当习惯于使用默认启用它的框架时。这也是最简单的一种提升速度性能的方式之一了。保守预估压缩页面内容可以将页面大小减少到70%

var compression = require('compression');  
var express = require('express');

var app = express();
app.use(compression());

 

2、在生产模式下运行Express

默认情况下,Express将以开发模式运行,这很容易被忽略掉,尤其是对于那些刚刚开始使用Node.js/Express的开发者

那么,生产和发展模式究竟有什么区别呢?原来,在开发模式下,每个请求都从文件中读取视图模板,而在生产模式下,模板只加载一次并缓存。这样你就可以在开发过程中轻松地进行更改,而不必每次都重新启动应用程序。然而,在生产环境中,这将大大降低性能,因为与更快的RAM相比,你不得不处理相比较慢的文件IO

轻松的是,让Express进入生产模式很容易。我们只需要设置一个环境变量

$ export NODE_ENV=production

不过要注意这种方法。如果服务器重新启动,您将丢失这个环境变量,并返回到使用开发模式。一个更持久的解决方案是在.bash_profile中设置变量:

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

 

3、使用Uglify压缩代码

对于几乎所有的网站,特别是那些具有大量样式和客户端功能的网站,静态资产会极大地拖累性能。必须为每个请求发送多个JavaScript和CSS文件,这最终会对服务器造成损害,而且这还没有考虑到用户在客户端必须等待所有单独的HTTP请求完成的时间

为了缓解这种情况,可以使用 Uglify 来缩小和连接JavaScript和CSS文件。将其与 Grunt 这样的任务运行器结合使用,你将能够轻松地自动化该流程。一个功能相当强大的Grunt文件(使用 grunt-contrib-uglify 插件)是这样的:

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']);
};

 

4、减少中间件(Middleware)使用

并不是说你永远都不应该使用中间件,显然中间件的使用是必要的,在Express应用程序中使用中间件有很多原因,但是很容易过分地复制你看到的其他应用程序使用的所有中间件。查看依赖项列表并决定是否真的需要安装的所有东西(cookiessessions、i18n、请求日志记录器等)

某些情况下,只需要中间件包进行开发,因此可以在生产环境中轻松禁用这些包:

var express = require('express');  
var debugMiddleware = require('my-debug-middleware');

var app = express();

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

 

5、增加最大套接字(Sockets)

默认情况下,Node.js HTTP服务器的套接字池限制只有5个。这是一个非常保守的数字,大多数服务器可以处理比这个多得多的套接字

可以允许尽可能多的套接字:

var http = require('http');  
var https = require('https');

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

这只适用于Node v0.10及以上版本。在v0.12中,maxSockets(对于http和https)被设置为无穷大

 

6、使用缓存控制(Cache-Control)

可以设置一个HTTP头,它将告诉用户浏览器缓存它刚刚接收到的内容。对于不经常更改的静态资产(JS、CSS等),这是很有必要的。分配应用程序范围的缓存设置:

var express = require('express');  
var app = express();

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

这将为公共目录中的所有内容分配缓存设置。对于更精细的控制,可以基于单个requests/routes设置缓存:

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');
});

 

结论

当然,你可以通过浏览开源网站找到一些很棒的技巧,比如 Ghost 博客平台。这些应用程序是由数千人开发和使用的,你通常可以找到一些非常有用的

你可以在Express之外做很多事情来加快速度。所有如果你还没做的话,可以看看Redis、Nginx和其他缓存机制能不能优化,以此来提升你的应用程序速度及性能~

 

转载请注明出处豆豆网

欢迎分享至:

版权声明:原创文章自由转载-非商用-非衍生-保持署名及文章出处(创意共享3.0许可证
转载说明:转载请注明出处豆豆网
部分文章选自网络(文首、末未标明豆豆网的均来自网络),我们对文中观点保持中立,本站涉及软件下载,仅供参考学习、交流之目的,涉及版权请告知删除,邮箱地址:豆豆网博客


发表评论

电子邮件地址不会被公开。 必填项已用*标注