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 相关文章推荐
window.location.reload()方法刷新页面弹出要再次显示该网页对话框
Apr 24 Javascript
jquery事件与函数的使用介绍
Sep 29 Javascript
jQuery-ui引入后Vs2008的无智能提示问题解决方法
Feb 10 Javascript
Js表格万条数据瞬间加载实现代码
Feb 20 Javascript
JavaScript 学习笔记之变量及其作用域
Jan 14 Javascript
jquery实现勾选复选框触发事件给input赋值
Feb 01 Javascript
js如何打印object对象
Oct 16 Javascript
微信小程序-拍照或选择图片并上传文件
Jan 06 Javascript
jQuery实现点击关注和取消功能
Jul 03 jQuery
Javasript设计模式之链式调用详解
Apr 26 Javascript
JavaScript刷新页面的几种方法总结
Mar 28 Javascript
微信小程序仿今日头条导航栏滚动解析
Aug 20 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多维数组遍历方法(2种实现方法)
2015/12/10 PHP
php实现的PDO异常处理操作分析
2018/12/27 PHP
PHP应用跨时区功能的实现方法
2019/03/21 PHP
php给数组赋值的实例方法
2019/09/26 PHP
Avengerls vs KG BO3 第二场2.18
2021/03/10 DOTA
JS中style属性
2006/10/11 Javascript
线路分流自动跳转代码;希望对大家有用!
2006/12/02 Javascript
用Javascript做flash做的事..才完成的一个类.Auntion Action var 0.1
2007/02/23 Javascript
Extjs Gird 支持中文拼音排序实现代码
2013/04/15 Javascript
js获取判断上传文件后缀名的示例代码
2014/02/19 Javascript
JavaScript函数的4种调用方法详解
2014/04/22 Javascript
jquery制作select列表双向选择示例代码
2014/09/02 Javascript
JavaScript学习笔记之内置对象
2015/01/22 Javascript
nodejs爬虫抓取数据乱码问题总结
2015/07/03 NodeJs
jquery动感漂浮导航菜单代码分享
2020/04/15 Javascript
如何解决谷歌浏览器下jquery无法获取图片的尺寸
2015/09/10 Javascript
实例详解AngularJS实现无限级联动菜单
2016/01/15 Javascript
理解js对象继承的N种模式
2016/01/25 Javascript
深入探究JavaScript中for循环的效率问题及相关优化
2016/03/13 Javascript
vue router学习之动态路由和嵌套路由详解
2017/09/21 Javascript
对vue里函数的调用顺序介绍
2018/03/17 Javascript
微信小程序地图(map)组件点击(tap)获取经纬度的方法
2019/01/10 Javascript
layui实现左侧菜单点击右侧内容区显示
2019/07/26 Javascript
Tensorflow的可视化工具Tensorboard的初步使用详解
2018/02/11 Python
python使用筛选法计算小于给定数字的所有素数
2018/03/19 Python
Appium+Python自动化测试之运行App程序示例
2019/01/23 Python
python使用Plotly绘图工具绘制水平条形图
2020/03/25 Python
Django 拆分model和view的实现方法
2019/08/16 Python
Python如何在main中调用函数内的函数方式
2020/06/01 Python
Python读取yaml文件的详细教程
2020/07/21 Python
python 实用工具状态机transitions
2020/11/21 Python
AmazeUI 加载进度条的实现示例
2020/08/20 HTML / CSS
安全标准化实施方案
2014/02/20 职场文书
《湘夫人》教学反思
2014/02/21 职场文书
2015年高中班主任工作总结
2015/04/30 职场文书
为Java项目添加Redis缓存的方法
2021/05/18 Redis