因为咱们团队的前端项目愈来愈庞大,加之Vue的SPA首屏加载特性,致使系统第一次加载速度愈来愈缓慢,可能达到几十秒的程度,因此为了优化用户性能体验,咱们选择了开启Gzip进行文件压缩,确实达到了显著的效果。javascript
gzip是一种数据的压缩格式,或者说是一种文件格式。
Gzip本来用户UNIX系统的文件压缩,后来逐渐成为Internet最主流的数据压缩格式。
当用户访问咱们的web站点时,服务器就将咱们的网页文件进行压缩,将压缩后的文件传输到客户端,对于纯文本文件咱们能够至少压缩到原大小的40%,这样大大提升了传输效率,页面即可更快的加载出来。php
因为目前咱们项目是使用ngxin来部署前端的,nginx自带HttpGzip模块
,因此咱们直接对nginx.conf
文件的http配置项进行配置便可。但相对的因为nginx自身处理请求而后压缩返回,会消耗对应的服务器内存。css
# 开启或者关闭gzip模块(on|off) gzip on; # 容许压缩的页面最小字节数, 默认值是0,无论页面多大都压缩。建议设置成大于1k的字节数,小于1k可能会越压越大 gzip_min_length 1k; # 设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。例如 4 4k 表明以4k为单位,按照原始数据大小以4k为单位的4倍申请内存。 gzip_buffers 4 16k; # 识别http的协议版本。因为早期的一些浏览器或者http客户端,可能不支持gzip自解压,用户就会看到乱码,因此作一些判断仍是有必要的。 #gzip_http_version 1.0; # gzip压缩比,1 压缩比最小处理速度最快,9 压缩比最大但处理最慢(传输快但比较消耗cpu)。 gzip_comp_level 2; # 匹配MIME类型进行压缩,(不管是否指定)"text/html"类型老是会被压缩的。 gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png; # 和http头有关系,加个vary头,给代理服务器用的 gzip_vary off; # 表示IE6及如下禁止压缩 gzip_disable "MSIE [1-6]\.";
测试效果html
咱们应尽量减小对服务端内存的使用,毕竟服务端的资源是十分宝贵的,这里咱们仍然使用nginx进行前端部署,咱们在客户端替nginx处理压缩文件这一步操做,nginx即可直接使用咱们压缩好的文件,下面是一个基于vue-cli配置的前端项目。前端
这里最好安装低版本,防止报错。vue
npm install compression-webpack-plugin@5.0.1 -D
这里能够根据你们不一样的配置,总之就是将webpack插件进行注册。java
const CompressionPlugin = require("compression-webpack-plugin"); module.export = { configureWebpack: { plugins: [ new CompressionPlugin({ filename: "[path].gz", //压缩算法 algorithm: "gzip", //匹配文件 test: /\.js$|\.css$|\.html$/, //压缩超过此大小的文件,以字节为单位 threshold: 10240, minRatio: 0.8, //删除原始文件只保留压缩后的文件 deleteOriginalAssets: false }) ] } }
成功运行后,即可以在打包文件中看到.gz结尾的文件了,将打包后的文件上传到指定的nginx文件夹下。webpack
npm run build
这里须要nginx对应的插件http_gzip_static_module
,以前我是经过yum安装的nginx,这里彷佛不能够,须要手动安装。这里目录能够根据你们我的状况而定。
安装nginxnginx
cd /usr/local/src/ wget http://nginx.org/download/nginx-1.18.0.tar.gz tar zxvf nginx-1.18.0.tar.gz cd nginx-1.18.0/ ./configure --prefix=/usr/local/nginx --with-http_gzip_static_module make && make install
修改nginx.confweb
cd /usr/local/nginx/conf/ vim nginx.conf
server { listen 80; server_name localhost; location / { root html; index index.html index.htm; try_files $uri $uri/ /index.html; gzip_static on; #静态压缩 } }
启动nginx服务
cd /usr/local/nginx/sbin ./nginx
这里咱们虽然服务端js文件夹里只有.gz格式的文件(其余的文件已删除),但客户端却成功读取了。
不管是服务端与客户端进行gzip的压缩,咱们都大大缩小了文件体积,给用户带来了更好的体验。
服务端处理gzip优势是只需配置一下便可,无需复杂操做,但缺点是会消耗服务器内存。
客户端处理gzip优势是无需服务器进行文件压缩,减小服务器内存消耗,但配置起来相比服务端gzip会稍加繁琐。
Nginx中文文档
什么是GZIP,有什么优点,如何开启GZIP?
vue-cli4 开发项目中开启gzip压缩,优化打包体积,提高加载速度
Nginx gzip static静态压缩
配置nginx直接使用webpack生成的gz压缩文件,而不用nginx本身压缩