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 相关文章推荐
简单的无缝滚动程序-仅几行代码
May 08 Javascript
Javascript 多浏览器兼容总结(实战经验)
Oct 30 Javascript
javascript实现微信分享
Dec 23 Javascript
jQuery中add()方法用法实例
Jan 08 Javascript
javascript单例模式的简单实现方法
Jul 25 Javascript
jquery+CSS实现的水平布局多级网页菜单效果
Aug 24 Javascript
原生JS实现旋转木马式图片轮播插件
Apr 25 Javascript
基于Bootstrap的Metronic框架实现条码和二维码的生成及打印处理操作
Aug 29 Javascript
Validform表单验证总结篇
Oct 31 Javascript
分享一道关于闭包、bind和this的面试题
Feb 20 Javascript
详解Axios统一错误处理与后置
Sep 26 Javascript
深入Node TCP模块的理解
Mar 13 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 文章调用类代码
2011/08/11 PHP
批量去除PHP文件中bom的PHP代码
2012/03/13 PHP
PHP简洁函数(PHP简单明了函数语法)
2012/06/10 PHP
php运行时动态创建函数的方法
2015/03/16 PHP
php基于CodeIgniter实现图片上传、剪切功能
2016/05/14 PHP
php+mysql查询实现无限下级分类树输出示例
2016/10/03 PHP
laravel框架模型和数据库基础操作实例详解
2020/01/25 PHP
php把文件设置为插件的技巧方法
2020/02/03 PHP
JS启动应用程序的一个简单例子
2008/05/11 Javascript
基于jQuery的可以控制左右滚动及自动滚动效果的代码
2010/07/25 Javascript
javascript实现模拟时钟的方法
2015/05/13 Javascript
jQuery实现下滑菜单导航效果代码
2015/08/25 Javascript
jQuery实现可编辑的表格实例讲解(2)
2015/09/17 Javascript
jquery ztree异步搜索(搜叶子)实践
2016/02/25 Javascript
Bootstrap3.0建站教程(一)之bootstrap表单元素排版
2016/06/01 Javascript
Vue计算属性的学习笔记
2017/03/22 Javascript
Javascript es7中比较实用的两个方法示例
2017/07/21 Javascript
删除table表格行的实例讲解
2017/09/21 Javascript
jQuery实现新闻播报滚动及淡入淡出效果示例
2018/03/23 jQuery
vue中axios请求的封装实例代码
2019/03/23 Javascript
JS实现拼图游戏
2021/01/29 Javascript
vue 扩展现有组件的操作
2020/08/14 Javascript
[00:32]2018DOTA2亚洲邀请赛iG出场
2018/04/03 DOTA
python自动化工具日志查询分析脚本代码实现
2013/11/26 Python
Django REST Framework序列化外键获取外键的值方法
2019/07/26 Python
Django 项目重命名的实现步骤解析
2019/08/14 Python
在Pytorch中计算自己模型的FLOPs方式
2019/12/30 Python
Pandas中DataFrame交换列顺序的方法实现
2020/12/14 Python
css3实现背景模糊的三种方式(小结)
2020/05/15 HTML / CSS
存储过程的优点有哪些
2012/09/27 面试题
英语专业学生的自我评价
2013/12/30 职场文书
入职担保书范文
2014/05/21 职场文书
项目工作说明书
2014/07/29 职场文书
春游踏青活动方案
2014/08/14 职场文书
优秀小学生事迹材料
2014/12/26 职场文书
三好学生评语大全
2014/12/29 职场文书