当前位置: 首页 > news >正文

前端性能优化之Gzip打包

前端性能优化之Gzip打包

一、静态:webpack使用gzip打包,nginx配置gzip_static打开

1、webpack使用gzip

1)npm安装 compression-webpack-plugin 模块
2)vue.config.js中配置

const CompressionPlugin = require('compression-webpack-plugin')
const productionGzipExtensions = /\.(js|css|json|txt|html|ico|svg)(\?.*)?$/i
// 打包压缩,更多参数参考 https://www.webpackjs.com/plugins/compression-webpack-plugin/
config.plugin('compressionPlugin')
    .use(new CompressionPlugin({
    filename: '[path].gz[query]', // 压缩后的文件名(保持原文件名,后缀加.gz)
    algorithm: 'gzip', // 使用gzip压缩
    test: productionGzipExtensions, // 匹配文件名
    threshold: 10240, // 对超过10k的数据压缩
    minRatio: 0.8, // 压缩率小于0.8才会压缩
    deleteOriginalAssets: true // 删除原资源
}))

2)nginx配置gzip_static

在nginx.conf中http模块添加
gzip_static on;
gzip_proxied expired no-cache no-store private auth;

二、动态:nginx配置gzip打开

在nginx.conf中http模块添加
# 开启和关闭gzip模式
gzip on;
# gizp压缩起点,文件大于1k才进行压缩
gzip_min_length 1k;
# 设置压缩所需要的缓冲区大小,以4k为单位,如果文件为7k则申请2*4k的缓冲区 
gzip_buffers 4 16k;
# 设置gzip压缩针对的HTTP协议版本
gzip_http_version 1.0;
# gzip 压缩级别,1-9,数字越大压缩的越好,也越占用CPU时间
gzip_comp_level 2;
# 进行压缩的文件类型
gzip_types text/plain application/javascript text/css application/xml;
# 是否在http header中添加Vary: Accept-Encoding,建议开启
gzip_vary on;

三、nginx踩坑、避坑

1)注意:nginx安装默认不带gzip_static模块

需要在编译安装时使用命令

./configure --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/usr/local/src/pcre-8.35 --with-http_gzip_static_module

具体安装nginx步骤,可参考菜鸟教程Nginx 安装配置

2)开放端口:8088 对应你自己配置的nginx访问端口,配置完后可输入网址:ip/域名:8088访问
/sbin/iptables -I INPUT -p tcp --dport 8088 -j ACCEPT

两者结合使用,首先尝试使用静态压缩,如果有则返回 .gz 的预压缩文件,否则尝试动态压缩

ps:附上我个人nginx配置文件、vue.config.js文件及package.json,Gzip相关配置文件

相关文章:

  • 初使用uni-app,适配多端,踩坑及经验合集
  • vscode 代码保存eslint自动格式化,最新配置:Eslint+Prettier
  • less清除浮动clearfix代码片段
  • Git使用及配置
  • Jenkins安装部署及实现CI/CD(ubuntu20.04)
  • Apache+tomcat安装 linux
  • 数字信封+数字签名流程图
  • DBLink创建方法
  • JBPM4入门+程序下载
  • JBPM3资料
  • Mac 安装pd虚拟机,远程桌面无法使用ctrl或其他符号无法使用问题
  • Django项目开发举例之创建开发环境(1)
  • Django项目开发举例举例之创建应用模型(2)
  • Django项目开发举例之应用的管理界面(3)
  • Django项目开发举例之自定义管理界面(4)
  • [NodeJS] 关于Buffer
  • 5、React组件事件详解
  • CAP 一致性协议及应用解析
  • JavaScript的使用你知道几种?(上)
  • Koa2 之文件上传下载
  • MySQL几个简单SQL的优化
  • rc-form之最单纯情况
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • Xmanager 远程桌面 CentOS 7
  • 前端性能优化——回流与重绘
  • 使用Gradle第一次构建Java程序
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 世界上最简单的无等待算法(getAndIncrement)
  • 云大使推广中的常见热门问题
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • 追踪解析 FutureTask 源码
  • Hibernate主键生成策略及选择
  • 积累各种好的链接
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • ​插件化DPI在商用WIFI中的价值
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • ( 10 )MySQL中的外键
  • (1)bark-ml
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (3)llvm ir转换过程
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (五)关系数据库标准语言SQL
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • .net framework 4.0中如何 输出 form 的name属性。
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
  • .NET的数据绑定
  • .NET中的十进制浮点类型,徐汇区网站设计
  • [2013AAA]On a fractional nonlinear hyperbolic equation arising from relative theory
  • [Angularjs]asp.net mvc+angularjs+web api单页应用