vue单页面打包文件大?首次加载慢?nginx带你飞,从7.5M到1.3M蜕变过程(推荐)


Posted in Javascript onJanuary 16, 2018

找到nginx多网站配置文件:类似 nginx/sites-available/www.baidu.com

server {
  listen 80;
  index index.html index.htm index.nginx-debian.html;
  server_name www.baidu.com;
  location / {
    root /mnt/www/www.baidu.com;
    try_files $uri $uri/ /index.html;
  }
}

参考页面:https://router.vuejs.org/zh-cn/essentials/history-mode.html

cnpm run build 文件过大

打包生成文件:

vue单页面打包文件大?首次加载慢?nginx带你飞,从7.5M到1.3M蜕变过程(推荐)

浏览器访问效果:

vue单页面打包文件大?首次加载慢?nginx带你飞,从7.5M到1.3M蜕变过程(推荐)

Nginx开启gzip

找到nginx.config。关于gzip压缩代码:

http {gzip on; #开启或关闭gzip on off
 gzip_disable "msie6"; #不使用gzip IE6
 gzip_min_length 100k; #gzip压缩最小文件大小,超出进行压缩(自行调节)
 gzip_buffers 4 16k; #buffer 不用修改
 gzip_comp_level 3; #压缩级别:1-10,数字越大压缩的越好,时间也越长
 gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png; #  压缩文件类型
 gzip_vary off;  #跟Squid等缓存服务有关,on的话会在Header里增加 "Vary: Accept-Encoding"
}

配置完重启Nginx

浏览器访问效果:

vue单页面打包文件大?首次加载慢?nginx带你飞,从7.5M到1.3M蜕变过程(推荐)

上面为数据流接收大小,下面为解压后实际大小。

识别gzip与非gzip请求

gzip请求:

vue单页面打包文件大?首次加载慢?nginx带你飞,从7.5M到1.3M蜕变过程(推荐)

非gzip请求:

vue单页面打包文件大?首次加载慢?nginx带你飞,从7.5M到1.3M蜕变过程(推荐)

gzip与非gzip在响应头中区别就是Content-Encoding是否表明是gzip压缩格式。

而上面通过接收数据与实际数据大小相比也能明显看出差异

webpack gzip

vue项目中config/index.js

productionGzip: true, //是否开启gizp压缩
productionGzipExtensions: ['js', 'css'],

开启后cnpm run build会生成*.gz文件。

像这样:

vue单页面打包文件大?首次加载慢?nginx带你飞,从7.5M到1.3M蜕变过程(推荐)

上传到服务器,测试查看接受文件大小。

vue单页面打包文件大?首次加载慢?nginx带你飞,从7.5M到1.3M蜕变过程(推荐)

gzip相应539kb。并非加载app.........gz的 412kb

删除*.gz文件,依旧539kb。

莫非,webpack打包gzip文件毫无卵用??????

gzip_static 静态压缩

经过一番百度。得一宝贝。gzip_static

什么东东呢?字面上意思就是:gzip静态。

卖个关子:

上面配置了。Nginx是可以开启gzip压缩,而且能够实现压缩效果。而它是如何工作的呢?

客户端发起请求

-》Nginx接收请求

-》Nginx加载文件进行gzip打包压缩成*.gz

-》返回给浏览器

-》浏览器解压*.gz (应该是它干的,反正看不见)

  也就是说,每次请求,Nginx都会进行压缩返回、压缩返回、压缩返回、 将会导致浪费大量CPU。

  这么个大bug是谁设计的?如果请求量大,CPU会不会挂掉?//猜测

  当然,并不会,gizp打包压缩后会临时缓存,

  所以,能不消耗CPU就不消耗CPU。

  废话太多,步入正题。放大招!!

  nginx.conf 

http { gzip on; #开启或关闭gzip on off
 gzip_static on;#是否开启gzip静态资源
 gzip_disable "msie6"; #不使用gzip IE6
 gzip_min_length 100k; #gzip压缩最小文件大小,超出进行压缩(自行调节)
 gzip_buffers 4 16k; #buffer 不用修改
 gzip_comp_level 3; #压缩级别:1-10,数字越大压缩的越好,时间也越长
 gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png; #  压缩文件类型
 gzip_vary off;  #跟Squid等缓存服务有关,on的话会在Header里增加 "Vary: Accept-Encoding"
}

emmmmmmmm.....重启nginx

OK。上图!

before:

vue单页面打包文件大?首次加载慢?nginx带你飞,从7.5M到1.3M蜕变过程(推荐)

after:

vue单页面打包文件大?首次加载慢?nginx带你飞,从7.5M到1.3M蜕变过程(推荐)

对比文件:

vue单页面打包文件大?首次加载慢?nginx带你飞,从7.5M到1.3M蜕变过程(推荐)

so 。开启gzip_static后。流程就会变成

//偷懒写法。。。。。if(*.gz){
 return *.gz //懒得压缩直接扔文件
}else{
 return gzip() //压缩再扔给浏览器 
}

nginx的gzip压缩力度从1-9 。如果开启过大,CPU会严重浪费,而webpack压缩gzip默认是9.因此,打包压缩gzip静态资源是很有必要的

所以,按需加载暂时不用考虑了

Javascript 相关文章推荐
TFDN图片播放器 不错自动播放
Oct 03 Javascript
通过正则格式化url查询字符串实现代码
Dec 28 Javascript
javascript实现颜色渐变的方法
Oct 30 Javascript
Node.js实现简单聊天服务器
Jun 20 Javascript
JS实现控制表格行文本对齐的方法
Mar 30 Javascript
js行号显示的文本框实现效果(兼容多种浏览器 )
Oct 23 Javascript
基于Vue.js实现简单搜索框
Mar 26 Javascript
bootstrap vue.js实现tab效果
Feb 07 Javascript
Vue中android4.4不兼容问题的解决方法
Sep 04 Javascript
浅谈layui使用模板引擎动态渲染元素要注意的问题
Sep 14 Javascript
如何实现iframe父子传参通信
Feb 05 Javascript
解决React在安装antd之后出现的Can't resolve './locale'问题(推荐)
May 03 Javascript
详解layui中的树形关于取值传值问题
Jan 16 #Javascript
基于JavaScript实现抽奖系统
Jan 16 #Javascript
详解JavaScript基础知识(JSON、Function对象、原型、引用类型)
Jan 16 #Javascript
浅谈vue的props,data,computed变化对组件更新的影响
Jan 16 #Javascript
Parcel 打包示例(React HelloWorld)
Jan 16 #Javascript
详解Vue快速零配置的打包工具——parcel
Jan 16 #Javascript
vue watch自动检测数据变化实时渲染的方法
Jan 16 #Javascript
You might like
Yii2使用小技巧之通过 Composer 添加 FontAwesome 字体资源
2014/06/22 PHP
从零开始学YII2框架(五)快速生成代码工具 Gii 的使用
2014/08/20 PHP
php采用file_get_contents代替使用curl实例
2014/11/07 PHP
php实现在服务器上创建目录的方法
2015/03/16 PHP
PHP实现的增强性mhash函数
2015/05/27 PHP
PHP实现链表的定义与反转功能示例
2018/06/09 PHP
php中pcntl_fork创建子进程的方法实例
2019/03/14 PHP
[JS]点出统计器
2020/10/11 Javascript
HTML上传控件取消选择
2013/03/06 Javascript
扒一扒JavaScript 预解释
2015/01/28 Javascript
JavaScript实现图片自动加载的瀑布流效果
2016/04/11 Javascript
Javascript设计模式之装饰者模式详解篇
2017/01/17 Javascript
JS实现数组去重方法总结(六种方法)
2017/07/14 Javascript
JavaScript实现的原生态兼容IE6可调可控滚动文字功能详解
2017/09/19 Javascript
在vue中使用公共过滤器filter的方法
2018/06/26 Javascript
原生JS实现前端本地文件上传
2018/09/08 Javascript
ajax与jsonp的区别及用法
2018/10/16 Javascript
使用express来代理服务的方法
2019/06/21 Javascript
微信小程序云开发如何实现数据库自动备份实现
2019/08/16 Javascript
如何利用javascript接收json信息并进行处理
2020/08/06 Javascript
[47:52]完美世界DOTA2联赛PWL S2 PXG vs InkIce 第二场 11.26
2020/11/30 DOTA
python 抓包保存为pcap文件并解析的实例
2019/07/23 Python
解决Python在导入文件时的FileNotFoundError问题
2020/04/10 Python
django和flask哪个值得研究学习
2020/07/31 Python
加拿大时尚潮流大码女装购物网站:Addition Elle
2018/04/02 全球购物
为什么UNION ALL比UNION快
2016/03/17 面试题
大学老师推荐信
2014/02/25 职场文书
房产委托公证书样本
2014/04/04 职场文书
借款协议书
2014/04/12 职场文书
成都人事代理协议书
2014/10/25 职场文书
航班延误投诉信
2015/07/02 职场文书
2015年公司国庆放假通知
2015/07/30 职场文书
演讲稿:​快乐,从不抱怨开始!
2019/04/02 职场文书
MySQL 角色(role)功能介绍
2021/04/24 MySQL
nginx部署多前端项目的几种方法
2021/05/25 Servers
MyBatis-Plus 批量插入数据的操作方法
2021/09/25 Java/Android