webpack打包之文件Gzip压缩与Brotli压缩配置
Author:zhoulujun Date:
Gzip简介
zip是GNUzip的缩写,它是一个GNU自由软件的文件压缩程序。它最早由Jean-loup Gailly和Mark Adler创建,用于UNⅨ系统的文件压缩。
我们在Linux中经常会用到后缀为.gz的文件,它们就是GZIP格式的。现今已经成为Internet 上使用非常普遍的一种数据压缩格式,或者说一种文件格式。
对此相关科普注释,顺手安利下:
HTTP协议上的GZIP编码是一种用来改进WEB应用程序性能的技术。大流量的WEB站点常常使用GZIP压缩技术来让用户感受更快的速度。减少文件大小有两个明显的好处,一是可以减少存储空间,二是通过网络传输文件时,可以减少传输的时间。
当然WEB服务器和客户端(浏览器)必须共同支持gzip。目前主流的浏览器Chrome,firefox,IE等都支持该协议。常见的服务器如Apache,Nginx,IIS同样支持gzip。
网站开启Gzip的方案
gzip支持,直接nginx上开启很简单
user andyChou; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #启用或禁用gzipping响应。# gzip on; #设置用于压缩响应的缓冲区number和size。默认情况下,缓冲区大小等于一个内存页面。这是4K或8K,具体取决于平台。# gzip_static on; #启用或禁用gzipping响应。# gzip_buffers 4 16k; #设置level响应的gzip压缩。可接受的值范围为1到9。# gzip_comp_level 5; #设置将被gzip压缩的响应的最小长度。长度仅由“Content-Length”响应头字段确定。# gzip_min_length 100; #匹配MIME类型进行压缩,text/html默认被压缩。# gzip_types text/plain application/javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png; }
但是,nginx开启gzip,影响服务器性能。对于原来的php之类的网站,开启这个是比较的好的选择。
但是对于前端打包输出的,应该直接 打包为gzip就好
webpack 开启gzip 压缩,当然,还可以开启比 gzip 体验更好的 Zopfli 压缩详见https://webpack.js.org/plugins/compression-webpack-plugin
npm i -D compression-webpack-plugin --save-dev npm i -D @gfx/zopfli brotli-webpack-plugin
gzip配置
if (config.build.productionGzip) { const CompressionWebpackPlugin = require("compression-webpack-plugin"); const IS_PROD = ["production", "prod"].includes(process.env.NODE_ENV); const productionGzipExtensions = /\.(js|css|json|txt|html|ico|svg)(\?.*)?$/i; const zopfli = require("@gfx/zopfli"); const BrotliPlugin = require("brotli-webpack-plugin"); webpackConfig.plugins.push( new CompressionWebpackPlugin({ asset: '[path].gz[query]', algorithm: 'gzip', test: new RegExp( '\\.(' + config.build.productionGzipExtensions.join('|') + ')$' ), threshold: 10240, minRatio: 0.8 }), new BrotliPlugin({ test: productionGzipExtensions, minRatio: 0.99 }) ) }
vue cli 配置也差不多咯
module.exports = { configureWebpack: config => { const plugins = []; const IS_PROD = ["production", "prod"].includes(process.env.NODE_ENV); if (IS_PROD) { const CompressionWebpackPlugin = require("compression-webpack-plugin"); const zopfli = require("@gfx/zopfli"); const BrotliPlugin = require("brotli-webpack-plugin"); const productionGzipExtensions = /\.(js|css|json|txt|html|ico|svg)(\?.*)?$/i; plugins.push( new CompressionWebpackPlugin({ algorithm(input, compressionOptions, callback) { return zopfli.gzip(input, compressionOptions, callback); }, compressionOptions: { numiterations: 15 }, minRatio: 0.99, test: productionGzipExtensions }), new BrotliPlugin({ test: productionGzipExtensions, minRatio: 0.99 }) ); } config.plugins = [...config.plugins, ...plugins]; } };
参考文章:
vue-cli4 全面配置(持续更新) https://staven630.github.io/vue-cli4-config/#gzip
转载本站文章《webpack打包之文件Gzip压缩与Brotli压缩配置》,
请注明出处:https://www.zhoulujun.cn/html/tools/Bundler/webpack/2020_1215_8590.html