若是你是個前端開發人員,你確定知道線上環境要把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模塊內