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扩展Array.prototype.indexOf引发的问题及解决办法
Jan 21 Javascript
js实现checkbox全选、不选与反选的方法
Feb 09 Javascript
jquery正则表达式验证(手机号、身份证号、中文名称)
Dec 31 Javascript
浅析jQuery中使用$所引发的问题
May 29 Javascript
jQuery插件实现可输入和自动匹配的下拉框
Oct 24 Javascript
利用JS轻松实现获取表单数据
Dec 06 Javascript
WebSocket实现简单客服聊天系统
May 12 Javascript
微信页面弹出键盘后iframe内容变空白的解决方案
Sep 20 Javascript
基于JavaScript实现报警器提示音效果
Oct 27 Javascript
layer插件select选中默认值的方法
Aug 14 Javascript
layui table 表格模板按钮的实例代码
Sep 21 Javascript
vue实现表格合并功能
Dec 01 Vue.js
详解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
simplehtmldom Doc api帮助文档
2012/03/26 PHP
mysql,mysqli,PDO的各自不同介绍
2012/09/19 PHP
分割GBK中文遭遇乱码的解决方法
2013/08/09 PHP
PHP判断变量是否为0的方法
2014/02/08 PHP
php实现将字符串按照指定距离进行分割的方法
2015/03/14 PHP
PHP中单例模式与工厂模式详解
2017/02/17 PHP
PHP实现的数独求解问题示例
2017/04/18 PHP
动态表单验证的操作方法和TP框架里面的ajax表单验证
2017/07/19 PHP
php5.6.x到php7.0.x特性小结
2019/08/17 PHP
JavaScript入门教程(1) 什么是JS
2009/01/31 Javascript
JavaScript中的typeof操作符用法实例
2014/04/05 Javascript
详谈jQuery操纵DOM元素属性 attr()和removeAtrr()方法
2015/01/22 Javascript
JS建造者模式基本用法实例分析
2015/06/30 Javascript
获取阴历(农历)和当前日期的js代码
2016/02/15 Javascript
connection reset by peer问题总结及解决方案
2016/10/21 Javascript
ES6概念 Symbol.keyFor()方法
2016/12/25 Javascript
一个有意思的鼠标点击文字特效jquery代码
2017/09/23 jQuery
vue+swiper实现侧滑菜单效果
2017/12/28 Javascript
微信小程序如何像vue一样在动态绑定类名
2018/04/17 Javascript
layer插件select选中默认值的方法
2018/08/14 Javascript
玩转Koa之koa-router原理解析
2018/12/29 Javascript
create-react-app中添加less支持的实现
2019/11/15 Javascript
jQuery实现鼠标放置名字上显示详细内容气泡提示框效果的方法分析
2020/04/04 jQuery
Python下使用Psyco模块优化运行速度
2015/04/05 Python
Python实现备份MySQL数据库的方法示例
2018/01/11 Python
Python列表切片操作实例总结
2019/02/19 Python
wxPython实现分隔窗口
2019/11/19 Python
python数据化运营的重要意义
2019/11/25 Python
ALEX AND ANI:手镯,项链,耳环和更多
2017/04/20 全球购物
印度最好的在线药品订购网站:PharmEasy
2018/11/30 全球购物
大一自我鉴定范文
2013/10/04 职场文书
中班下学期幼儿评语
2014/12/30 职场文书
穆斯林的葬礼读书笔记
2015/06/26 职场文书
导游词之山东孔庙
2019/11/04 职场文书
SQL语句中JOIN的用法场景分析
2021/07/25 SQL Server
使用Nginx搭载rtmp直播服务器的方法
2021/10/16 Servers