若是你是个前端开发人员,你确定知道线上环境要把js,css,图片等压缩,尽可能减小文件的大小,提高响应速度,特别是对移动端,这个很是重要。javascript
前端压缩的方式不少,依赖java的有ant工具,前端本身打包压缩的有grunt,gulp,webpack,这些压缩也很重要,基本上能压缩50%以上,下面咱们对压缩文件来个对比,如图所示,这是未压缩的php
这是压缩后的css
高能预警!!!gzip能在压缩的基础上再进行压缩50%以上!!!html
可是不是每一个浏览器都支持gzip的,若是知道客户端是否支持gzip呢,请求头中有个Accept-Encoding来标识对压缩的支持。客户端http请求头声明浏览器支持的压缩方式,服务端配置启用压缩,压缩的文件类型,压缩方式。当客户端请求到服务端的时候,服务器解析请求头,若是客户端支持gzip压缩,响应时对请求的资源进行压缩并返回给客户端,浏览器按照本身的方式解析,在http响应头,咱们能够看到content-encoding:gzip,这是指服务端使用了gzip的压缩方式。前端
那么怎么看有没有用gzip压缩的文件呢,打开f12,查看network,按照下面的方式过滤java
content-encoding是gzip的话就说明返回的是gzipnode
前面说过了,启用gzip须要客户端和服务端的支持,若是客户端支持gzip的解析,那么只要服务端可以返回gzip的文件就能够启用gzip了,如今来讲一下几种不一样的环境下的服务端如何配置webpack
node端很简单,只要加上compress模块便可,代码以下nginx
var compression = require('compression') var app = express(); //尽可能在其余中间件前使用compression app.use(compression());
这是基本用法,若是还要对请求进行过滤的话,还要加上git
app.use(compression({filter: shouldCompress})) function shouldCompress (req, res) { if (req.headers['x-no-compression']) { // 这里就过滤掉了请求头包含'x-no-compression' return false } return compression.filter(req, res) }
更多用法请移步compression文档
若是用的是koa,用法和上面的差很少
const compress = require('koa-compress'); const app = module.exports = new Koa(); app.use(compress());
由于node读取的是生成目录中的文件,因此要先用webpack等其余工具进行压缩成gzip,webpack的配置以下
const CompressionWebpackPlugin = require('compression-webpack-plugin'); plugins.push( new CompressionWebpackPlugin({ asset: '[path].gz[query]',// 目标文件名 algorithm: 'gzip',// 使用gzip压缩 test: new RegExp( '\\.(js|css)$' // 压缩 js 与 css ), threshold: 10240,// 资源文件大于10240B=10kB时会被压缩 minRatio: 0.8 // 最小压缩比达到0.8时才会被压缩 }) );
plugins是webpack的插件
tomcat的配置以下
找到tomcat的server.xml文件,找到其中Connector节点而后进行配置修改,具体配置以下
<Connectorport="80"protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" maxPostSize="0" useBodyEncodingForURI="true"compression="on" compressionMinSize="2048" noCompressionUserAgents="gozilla, traviata" compressableMimeType="text/html,text/xml,application/javascript,text/css,text/plain,image/jpeg,application/json"/>
参数说明:
注意:tomcat7之后,js文件的mimetype类型变为了application/javascript,而在tomcat7如下则为text/javascript;具体的tomcat7定义的类型能够在:conf/web.xml文件中找到。
能够在web.xml下搜索,如我搜索javascript会找到以下代码
<mime-mapping> <extension>js</extension> <mime-type>application/javascript</mime-type> </mime-mapping>
切记上面的类型不能配置错了,若是配置错了压缩是不会起做用的。
gzip使用环境:http,server,location,if(x),通常把它定义在nginx.conf的http{…..}之间
以上代码能够插入到 http {...}整个服务器的配置里,也能够插入到虚拟主机的 server {...}或者下面的location模块内