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 相关文章推荐
关于JS中的闭包浅谈
Aug 23 Javascript
JS使用ajax方法获取指定url的head信息中指定字段值的方法
Mar 24 Javascript
JS+CSS实现下拉列表框美化效果(3款)
Aug 15 Javascript
Javascript删除指定元素节点的方法
Jun 21 Javascript
jQuery+CSS3实现点赞功能
Mar 13 Javascript
详解Angular.js数据绑定时自动转义html标签及内容
Mar 30 Javascript
关于javascript获取内联样式与嵌入式样式的实例
Jun 01 Javascript
原生JS获取元素的位置与尺寸实现方法
Oct 18 Javascript
浅谈Vue.js 组件中的v-on绑定自定义事件理解
Nov 17 Javascript
微信小程序实现星级评分和展示
Jul 05 Javascript
基于vue中keep-alive缓存问题的解决方法
Sep 21 Javascript
对vue中的事件穿透与禁止穿透实例详解
Oct 28 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
长波有什么东西
2021/03/01 无线电
php中autoload的用法总结
2013/11/08 PHP
生成随机字符串和验证码的类的PHP实例
2013/12/24 PHP
PHP正则替换函数preg_replace和preg_replace_callback使用总结
2014/09/22 PHP
php使用指定字符列表生成随机字符串的方法
2015/04/18 PHP
浅谈PHP eval()函数定义和用法
2016/06/21 PHP
PHP单例模式与工厂模式详解
2017/08/29 PHP
javascript中的有名函数和无名函数
2007/10/17 Javascript
js实现的常用的左侧导航效果
2013/10/17 Javascript
使用js判断TextBox控件值改变然后出发事件
2014/03/07 Javascript
ajax提交表单实现网页无刷新注册示例
2014/05/08 Javascript
$.extend 的一个小问题
2015/06/18 Javascript
JS模仿手机端九宫格登录功能实现代码
2016/04/28 Javascript
jquery attr()设置和获取属性值实例教程
2016/09/25 Javascript
jQuery插件FusionCharts绘制的2D双面积图效果示例【附demo源码】
2017/04/11 jQuery
p5.js入门教程之图片加载
2018/03/20 Javascript
layer.open 按钮的点击事件关闭方法
2018/08/17 Javascript
详解Jest结合Vue-test-utils使用的初步实践
2019/06/27 Javascript
Vue.js实现tab切换效果
2019/07/24 Javascript
nodejs文件夹深层复制功能
2019/09/03 NodeJs
Postman环境变量全局变量使用方法详解
2020/08/13 Javascript
编写Python脚本抓取网络小说来制作自己的阅读器
2015/08/20 Python
python中zip()方法应用实例分析
2016/04/16 Python
一百行python代码将图片转成字符画
2021/02/19 Python
python使用Plotly绘图工具绘制柱状图
2019/04/01 Python
Python Opencv图像处理基本操作代码详解
2020/08/31 Python
python定时截屏实现
2020/11/02 Python
采用专利算法搜索最廉价的机票:CheapAir
2016/09/10 全球购物
惠普加拿大在线商店:HP加拿大
2017/09/15 全球购物
机电一体化专业应届生求职信
2013/11/27 职场文书
财务人员的自我评价范文
2014/03/03 职场文书
党性分析材料格式
2014/12/19 职场文书
物业客服专员岗位职责
2015/04/07 职场文书
助学金申请书该怎么写?
2019/07/16 职场文书
解析python中的jsonpath 提取器
2022/01/18 Python
Python加密与解密模块hashlib与hmac
2022/06/05 Python