使用node.js提供静态gzip文件

pj_*_*ata 12 static nginx node.js express

由于开销,我不想使用动态gzips的库.

该网站有一些动态组件,在node.js中实现.

我有一些静态的js和css文件以及它们的gzip压缩文件.我想只为支持它的浏览器提供gzip压缩版本.

我考虑使用express中的静态中间件来提供静态文件,以及一些URL重写中间件来有条件地提供gzip压缩文件.但是,我找不到任何条件重写模块.

我无法相信没有人这样做,或者它需要这么多的工作.我错过了什么?

另一方面,通过node.js提供静态文件太贵了吗?另一方面,使用Apache作为静态文件并运行node.js似乎也很糟糕.AWS EC2托管的最不笨的配置是什么?

Far*_*hat 13

如果您想为您的客户提供最佳性能,请使用CDN.它将为您和许多其他东西照顾gzipping.如果您需要帮助,可以使用express-cdn模块.

如果由于某些原因你不喜欢CDN,最好的办法就是使用nginx.我在你的问题中看到它被标记了,但是你没有提到它.nginx比node.js快.对于nginx,您可以检查它的gzip-static模块.

如果您仍想使用node.js,那么connect-gzip-static是您最好的选择.它的工作方式与nginx-gzip-static模块几乎相同.如果.gz所请求文件的文件对应,那么它将使用它,否则它将回退到正常的connect-static模块.

不要忘记事先编译文件,如果你正在使用gulp,那么你也可以使用gulp-gzip.如果不只是使用gzip命令.

还有gzippo,它在飞行中gzips,但它也将结果缓存在内存中.所以它只会被gzipped一次.


Sha*_*kam 10

此代码适用于Express 4

app.get('*.js', function(req, res, next) {
  req.url = req.url + '.gz';
  res.set('Content-Encoding', 'gzip');
  res.set('Content-Type', 'text/javascript');
  next();
});
app.get('*.css', function(req, res, next) {
  req.url = req.url + '.gz';
  res.set('Content-Encoding', 'gzip');
  res.set('Content-Type', 'text/css');
  next();
});
Run Code Online (Sandbox Code Playgroud)

确保为这样的压缩文件设置正确的内容类型 - mime-types reference - :

res.set('Content-Type', 'text/css');
Run Code Online (Sandbox Code Playgroud)

或者它不起作用

  • 不应该首先有一个条件 - 某种检查浏览器是否会接受 gz 版本? (2认同)