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 相关文章推荐
EasyUI 中 MenuButton 的使用方法
Jul 14 Javascript
json数据与字符串的相互转化示例
Sep 18 Javascript
JavaScript调用客户端的可执行文件(示例代码)
Nov 28 Javascript
javascript实现全局匹配并替换的方法
Apr 27 Javascript
BootStrap与validator 使用笔记(JAVA SpringMVC实现)
Sep 21 Javascript
AngularJS实现在ng-Options加上index的解决方法
Nov 03 Javascript
jQuery EasyUi 验证功能实例解析
Jan 06 Javascript
node.js中express中间件body-parser的介绍与用法详解
May 23 Javascript
Bootstrap提示框效果的实例代码
Jul 12 Javascript
浅谈Vue.js应用的四种AJAX请求数据模式
Aug 30 Javascript
vue-cli3+ts+webpack实现多入口多出口功能
May 30 Javascript
Openlayers3实现车辆轨迹回放功能
Sep 29 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执行linux系统命令的常用函数使用说明
2010/04/27 PHP
php中一个有意思的日期逻辑处理
2012/03/25 PHP
PHP根据IP地址获取所在城市具体实现
2013/11/27 PHP
PHP实现多维数组转字符串和多维数组转一维数组的方法
2015/08/08 PHP
php使用QueryList轻松采集js动态渲染页面方法
2018/09/11 PHP
laravel框架中表单请求类型和CSRF防护实例分析
2019/11/23 PHP
javascript 判断数组是否已包含了某个元素的函数
2010/05/30 Javascript
JavaScript中继承的一些示例方法与属性参考
2010/08/07 Javascript
Javascript前端UI框架Kit使用指南之kitjs的对话框组件
2014/11/28 Javascript
jQuery选择id属性带有点符号元素的方法
2015/03/17 Javascript
浅谈JavaScript中数组的增删改查
2016/06/20 Javascript
jQuery层级选择器实例代码
2017/02/06 Javascript
jQuery中用on绑定事件时需注意的事项
2017/03/19 Javascript
基于vue cli重构多页面脚手架过程详解
2018/01/23 Javascript
vue中post请求以a=a&b=b 的格式写遇到的问题
2018/04/27 Javascript
vue弹窗消息组件的使用方法
2020/09/24 Javascript
jQuery扩展方法实现Form表单与Json互相转换的实例代码
2018/09/05 jQuery
详解vantUI框架在vue项目中的应用踩坑
2018/12/06 Javascript
Emberjs 通过 axios 下载文件的方法
2019/09/03 Javascript
简单了解Python下用于监视文件系统的pyinotify包
2015/11/13 Python
安装Python和pygame及相应的环境变量配置(图文教程)
2017/06/04 Python
python通过getopt模块如何获取执行的命令参数详解
2017/12/29 Python
Django视图扩展类知识点详解
2019/10/25 Python
基于keras输出中间层结果的2种实现方式
2020/01/24 Python
解决tensorflow/keras时出现数组维度不匹配问题
2020/06/29 Python
Python 创建TCP服务器的方法
2020/07/28 Python
使用placeholder属性设置input文本框的提示信息
2020/02/19 HTML / CSS
介绍一下Transact-SQL中SPACE函数的用法
2015/09/01 面试题
军校大学生个人的自我评价
2014/02/17 职场文书
幼儿园六一儿童节文艺汇演主持词
2014/03/21 职场文书
公司委托书格式范文
2014/04/04 职场文书
医师定期考核实施方案
2014/05/07 职场文书
个人安全承诺书
2014/05/22 职场文书
防暑降温通知书
2015/04/27 职场文书
厉行节约工作总结
2015/08/12 职场文书
2019年图书室自查报告范本
2019/10/12 职场文书