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 相关文章推荐
JavaScript DOM 学习第二章 编辑文本
Feb 19 Javascript
XENON基于JSON变种
Jul 27 Javascript
实现点击列表弹出列表索引的两种方式
Mar 08 Javascript
js图片滚动效果时间可随意设定当鼠标移上去时停止
Jun 26 Javascript
JavaScript中的toLocaleDateString()方法使用简介
Jun 12 Javascript
jQuery实现带有洗牌效果的动画分页实例
Aug 31 Javascript
基于JavaScript实现屏幕滚动效果
Jan 18 Javascript
ionic2打包android时gradle无法下载的解决方法
Apr 05 Javascript
Vue filter介绍及其使用详解
Oct 21 Javascript
javaScript中的空值和假值
Dec 18 Javascript
node.JS事件机制与events事件模块的使用方法详解
Feb 06 Javascript
vue全屏事件开发详解
Jun 17 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
PHP文件打开、关闭、写入的判断与执行代码
2011/05/24 PHP
php中判断数组相等的方法以及数组运算符介绍
2015/03/30 PHP
php正则preg_replace_callback函数用法实例
2015/06/01 PHP
Smarty模板配置实例简析
2019/07/20 PHP
JavaScript中的History历史对象
2008/01/16 Javascript
让mayfish支持mysqli数据库驱动的实现方法
2010/05/22 Javascript
两种方法基于jQuery实现IE浏览器兼容placeholder效果
2014/10/14 Javascript
AngularJS的内置过滤器详解
2015/05/14 Javascript
js实现的二分查找算法实例
2016/01/21 Javascript
JavaScript中数组添加值和访问值常见问题
2016/02/06 Javascript
jquery动态遍历Json对象的属性和值的方法
2016/07/27 Javascript
AngularJS模板加载用法详解
2016/11/04 Javascript
一个例子轻松学会Vue.js
2017/01/02 Javascript
AngulaJS路由 ui-router 传参实例
2017/04/28 Javascript
webstorm添加vue.js支持的方法教程
2017/07/05 Javascript
基于vue+canvas的excel-like组件实例详解
2017/11/28 Javascript
记录一篇关于redux-saga的基本使用过程
2018/08/18 Javascript
vue 的点击事件获取当前点击的元素方法
2018/09/15 Javascript
layui实现左侧菜单点击右侧内容区显示
2019/07/26 Javascript
Vue项目前后端联调(使用proxyTable实现跨域方式)
2020/07/18 Javascript
Django中模型Model添加JSON类型字段的方法
2015/06/17 Python
python3 对list中每个元素进行处理的方法
2018/06/29 Python
python代码实现猜拳小游戏
2020/11/30 Python
详解pandas映射与数据转换
2021/01/22 Python
全球性的在线时尚男装零售商:boohooMAN
2016/12/17 全球购物
美味咖啡的顶级烘焙师:Cafe Britt
2018/03/15 全球购物
开放系统互连参考模型
2016/06/29 面试题
西式婚礼证婚词
2014/01/12 职场文书
秋季运动会活动方案
2014/02/05 职场文书
2014年党员公开承诺书范文
2014/03/28 职场文书
运动会演讲稿
2014/05/07 职场文书
教师国庆节演讲稿范文2014
2014/09/21 职场文书
领导干部“四风”查摆问题个人整改措施
2014/10/28 职场文书
2014年校长工作总结
2014/12/11 职场文书
假如给我三天光明:舟逆水而行,人遇挫而达 
2019/10/29 职场文书
vue3使用vuedraggable实现拖拽功能
2022/04/06 Vue.js