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 相关文章推荐
dojo学习第一天 Tab选项卡 实现
Aug 28 Javascript
jqGrid增加时--判断开始日期与结束日期(实例解析)
Nov 08 Javascript
js 实现菜单上下显示附效果图
Nov 21 Javascript
Jquery模仿Baidu、Google搜索时自动补充搜索结果提示
Dec 26 Javascript
7个JS基础知识总结
Mar 05 Javascript
JS获取当前网页大小以及屏幕分辨率等
Sep 05 Javascript
bootstrap table 服务器端分页例子分享
Feb 10 Javascript
用JavaScript显示浏览器客户端信息的超相近教程
Jun 18 Javascript
JS实现将Asp.Net的DateTime Json类型转换为标准时间的方法
Aug 02 Javascript
在vue项目中使用Nprogress.js进度条的方法
Jan 31 Javascript
使用 webpack 插件自动生成 vue 路由文件的方法
Aug 20 Javascript
vue实现淘宝购物车功能
Apr 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在线生成ico文件的代码
2007/10/09 PHP
php getsiteurl()函数
2009/09/05 PHP
判断Keep-Alive模式的HTTP请求的结束的实现代码
2011/08/06 PHP
javascritp实现input输入框相关限制用法
2007/06/29 Javascript
javascript 显示当前系统时间代码
2009/12/28 Javascript
基于jquery的滚动鼠标放大缩小图片效果
2011/10/27 Javascript
Extjs优化(二)Form表单提交通用实现
2013/04/15 Javascript
面向对象继承实例(a如何继承b问题)(自写)
2013/07/01 Javascript
图片上传插件jquery.uploadify详解
2013/11/15 Javascript
JQuery结合CSS操作打印样式的方法
2013/12/24 Javascript
js判断字符是否是汉字的两种方法小结
2014/01/03 Javascript
jquery操作select详解(取值,设置选中)
2014/02/07 Javascript
学习JavaScript设计模式之策略模式
2016/01/12 Javascript
AngularJS ng-change 指令的详解及简单实例
2016/07/30 Javascript
完美解决input[type=number]无法显示非数字字符的问题
2017/02/28 Javascript
基于ajax和jsonp的原生封装(实例)
2017/10/16 Javascript
antd Upload 文件上传的示例代码
2018/12/14 Javascript
Vue组件间通信方法总结(父子组件、兄弟组件及祖先后代组件间)
2019/04/17 Javascript
javascript移动端 电子书 翻页效果实现代码
2019/09/07 Javascript
实现vuex与组件data之间的数据同步更新方式
2019/11/12 Javascript
在react中使用vue的状态管理的方法示例
2020/05/02 Javascript
vue+iview实现分页及查询功能
2020/11/17 Vue.js
Python3实现对列表按元组指定列进行排序的方法分析
2018/12/22 Python
Python递归函数 二分查找算法实现解析
2019/08/12 Python
Python 爬虫的原理
2020/07/30 Python
python3获取控制台输入的数据的具体实例
2020/08/16 Python
使用CSS3配合IE滤镜实现渐变和投影的效果
2015/09/06 HTML / CSS
几个CSS3的flex弹性盒模型布局的简单例子演示
2016/05/12 HTML / CSS
墨尔本最受欢迎的复古风格品牌:Princess Highway
2018/12/21 全球购物
Right-on官方网站:日本知名的休闲服装品牌
2019/07/12 全球购物
怎样写好自我鉴定
2013/12/04 职场文书
职业培训师职业生涯规划
2014/02/18 职场文书
团代会宣传工作方案
2014/05/08 职场文书
社会体育专业大学生职业生涯规划书
2014/09/17 职场文书
2015新年寄语(一句话)
2014/12/08 职场文书
2015新员工工作总结范文
2015/10/15 职场文书