未加星标

Express.js 性能优化

字体大小 | |
[前端(javascript) 所属分类 前端(javascript) | 发布者 店小二05 | 时间 2016 | 作者 红领巾 ] 0人收藏点击收藏

本文讨论如何提高Express在生产环境的性能,包括HTTP响应的压缩与缓存, 视图与样式的缓存,以及调试信息优化。

静态文件缓存

可通过缓存静态文件来提高页面载入速度,同时也减轻了服务器负载。 比如设置缓存时间为一天:

var app = express(); app.use(express.static('./assets', { maxAge: 864000 // one day }));

如此依赖浏览器请求静态文件时就会添加 If-Modified-Since 头字段, 而服务器会响应304(不发送响应体)来指示浏览器使用本地缓存。

响应体压缩

在HTTP页面很大,或者静态资源很大时页面载入可能需要较长时间。 尤其是当你使用较低性能的VPS或云主机时。 使用 compression 可以对响应体进行gzip压缩,使用非常简单:

const compression = require('compression'); app.use(compression());

至此你再次访问Express服务的URL时,响应体会明显减小,响应头也会多一个字段:

Content-Encoding: gzip

通常在性能优化之前应当先找到性能瓶颈,而不是将精力耗费在90%的无用优化上。 具体是响应时间长,下载时间长,还是渲染速度慢可以通过Chrome调试工具的Timeline分析。 参考: Web性能优化:prefetch, prerender

环境变量

Harttle曾经认为 NODE_ENV 环境变量只是为了方便业务代码在生产环境和开发环境切换。 于是也没在意保持这个环境变量的名字,甚至用配置文件来代替环境变量。 万万没想到 NODE_ENV 会对Express的性能有很大影响,将 NODE_ENV 设置为”production”会使 Express:

缓存视图模板。 缓存从 CSS 插件生成的 CSS。 生成简短的错误信息。

这些优化可以让Express快若干倍!

避免同步方法

在单线程的Express应用中应当极力避免同步方法,同步调用会使整个Express停止响应其他请求。 这里最容易忽略的是同步日志:如果我们单纯地将访问日志同步写入文件会大大降低性能。

像 Winston 之类的日志工具早就实现了异步日志写入,在生产环境推荐使用成熟的日志工具。

调试信息

将 NODE_ENV 可以减少错误信息的生成,Express的错误处理也会更快一些。 然而我们在开发调试时也会打印很多信息到控制台,这些IO都会极大地影响性能。

推荐使用类似 debug 的调试日志工具,它们有环境变量作为开关。 可以只在开发环境下开启,而在生产环境中关闭。

扩展阅读

http://expressjs.com/en/advanced/best-practice-performance.html

http://blog.modulus.io/nodejs-and-express-static-content

本文前端(javascript)相关术语:javascript是什么意思 javascript下载 javascript权威指南 javascript基础教程 javascript 正则表达式 javascript设计模式 javascript高级程序设计 精通javascript javascript教程

主题: 服务器CSS浏览器Chrome变量VPS
分页:12
转载请注明
本文标题:Express.js 性能优化
本站链接:http://www.codesec.net/view/481526.html
分享请点击:


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 前端(javascript) | 评论(0) | 阅读(30)