分享好友 最新动态首页 最新动态分类 切换频道
前端必看:前端性能优化之Gzip压缩
2024-12-25 14:10

gzip是GNUzip的缩写,是一种文件的压缩格式(也可以说是若干种文件压缩程序,类似的压缩格式还有compress,deflate等。

web上使用gzip编码格式传输有几个要点

  1. 浏览器和服务器都需要支持gzip编码
  2. 采用 LZ77 算法与 Huffman 编码来压缩文件,是一种无损压缩算法
  3. 压缩比率在3-10倍左右(纯文本,可以大大节省服务器的网络带宽

最佳实践类型是html、js、css

图片资源为什么不需要Gzip压缩
这个和gzip使用的Deflate算法有关系,因为它使用了 LZ77 算法与 Huffman 编码来压缩文件重复度越高的文件可压缩的空间就越大,但是图片的重复度是很低的,甚至压缩后页面的体积会变大,得不偿失

1. 浏览器请求url,并在请求头中设置属性accept-encoding: gzip。这表明该浏览器是支持gzip,该参数浏览器在请求资源时会自动带上。
2. 服务器在接收到浏览器发送的请求之后,服务器会返回压缩后的文件,并在响应头重包含content-encoding: gzip。若是没有gzip文件,会返回为压缩的文件。
3. 浏览器接收到服务器的响应之后,根据content-encoding: gzip响应头使用gzip策略解压压缩后的资源,通过content-type内容类型决定怎么编码读取该文件内容。

是否所有的浏览器都支持gzip?
是的。所有浏览器都支持。

content-type和content-encoding的区别?

  • content-type:内容类型,决定文件接收方以什么形式、什么编码读取这个文件,注重是浏览器如何读取文件。
  • content-encoding:设置文件内容的编码格式,传输前什么格式,传输后接收到要以什么格式解析,注重如何传输文件。

一、服务器在线Gzip压缩(nginx

服务在线Gzip压缩,不同服务器会有不同的配置,比如node服务器、nginx服务器、tomcat服务器

本次主要围绕nginx配置来阐述流程,以下是nginx的配置属性

属性说明建议值compressionon为启用,off为关闭ongzip_min_length设置允许压缩的页面最小字节数,页面字节数从header头中的Content-Length中进行获取。默认值是0,不管页面多大都压缩。建议设置成大于1k的字节数,小于1k可能会越压越大1kgzip_buffers获取多少内存用于缓存压缩结果,‘4 16k’表示以16k*4为单位获得4 16kgzip_comp_levelgzip压缩比(1~9,越小压缩效果越差,但是越大处理越慢,所以一般取中间值4gzip_types对特定的MIME类型生效,其中'text/html’被系统强制启用text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;gzip_http_version识别http协议的版本,早起浏览器可能不支持gzip自解压,用户会看到乱码1.1gzip_vary启用应答头"Vary: Accept-Encoding"on

其中的zip_comp_level,是一项重要的性能指标,取值多少最合理?以下是以umi为例,level从1-9,压缩之后的umi.742a046d.js文件分析
 


以上分析得出结论:随着压缩率的提高,所消耗的CPU也会越来越多。从1-4压缩比较明显,5以后基本变化不大。估建议设置gzip_comp_level 4

二、前端预生成gz文件

前端工程项目可以在打包的时候,前端使用webpack或vite打包工作,生成gz文件。这样的目的是减少在服务器在线生成gzip的步骤。

Nginx服务器只需要配置

// 静态加载本地的gz文件,需要在nginx上安装http_gzip_static_module模块
gzip_static on;

在webpack中可以使用compression-webpack-plugin来实现

const CompressionPlugin = require('compression-webpack-plugin');

module.exports = {
  // ...其他配置
  plugins: [
    new CompressionPlugin({
      // 匹配需要进行Gzip压缩的文件类型
      test: /.(js|css|html|svg)$/,
      // 只有文件大小大于等于该值时才会生成Gzip文件
      threshold: 10240,
    }),
  ],
};

在vite中使用vite-plugin-compression来实现

import compressPlugin from 'vite-plugin-compression';

export default defineConfig({
  plugins: [
    compressPlugin({
      ext: '.gz',
      algorithm: 'gzip',
      deleteOriginFile: false,
    }),
  ],
});

Gzip两种方式结合

1、两种方式的优缺点

一、前端借助构建工具,预先生成gz文件,缺点是构打包后构建的产物体积会变大,优点是不耗费服务器的性能。
二、使用nginx在线Gzip,缺点是需要实时压缩,会耗费服务器的性能,但是无需前端预先生成gz文件。

2、两种方式结合的配置

有gz文件的时候使用静态资源,不存在gz文件的时候进行在线压缩而不是加载源文件,需要在nginx上把两种配置都写上。

// nginx配置
gzip on;
gzip_static on;
gzip_comp_level 4;
gzip_types text/plain text/html text/css application/x-javascript text/xml application/xml application/xml

gzip_static的优先级高,会先加载静态gz文件,当同目录下不存在此文件的时候,会执行在线压缩命令

3、确定请求资源是否为gzip压缩
  1. 响应头的Content-Edcoding:gzip表示gzip压缩已经生效
  2. 比较文件大小,看请求资源文件大小是否比打包后的资源更小  
4、确定是否请求的是预打包的gz资源

Etag中只有简单字符表示静态资源加载,而前面带 W/ 表示启动了在线压缩。

关于目前低代码在技术领域很活跃

这边介绍一款好用的低代码平台——JNPF 快速开发平台。近年在市场表现和产品竞争力方面表现较为突出,采用的是最新主流前后分离框架(SpringBoot+Mybatis-plus+Ant-Design+Vue3)。代码生成器依赖性低,灵活的扩展能力,可灵活实现二次开发。

以 JNPF 为代表的企业级低代码平台为了支撑更高技术要求的应用开发,从数据库建模、Web API 构建到页面设计,与传统软件开发几乎没有差异,只是通过低代码可视化模式,减少了构建“增删改查”功能的重复劳动,还没有了解过低代码的伙伴可以尝试了解一下。

应用体验地址:https://www.jnpfsoft.com/?csdn

最新文章
构建可以查找相似图像的图像搜索引擎的深度学习技术详解
来源:DeepHub IMBA“按照片进行搜索”方式已经出现在各个领域,特别是在电子商务网站中(例如淘宝),并且 “通过关键词搜索图片”(对图片内容的理解)早已被谷歌、百度,bing等搜索引擎使用(图片搜索)。我认为自从计算机视觉界轰动一
程序员副业100问 | Q7:AI会替代程序员吗?
大家好,我是易安。几个月前我带的一个实习生,用AI工具3天时间就搞定了我之前预估需要2周的功能开发。不仅实现了所有要求,代码质量和单测覆盖率都异常优秀。今天,让我聊聊程序员在AI时代的生存之道。最近半年,我们团队的变化很大:代码
「排列五最大值振幅走势图近100期」体彩排列五走势图
排列五最大值振幅走势图近100期主要提供奖号最大值振幅的不同属性的走势分布 1、本图表默认30期内号码走势,可通过期号设置来自行设置期数区间选择参考走势图2、在预测行一可以点击输入您看好的当期号码,在预测行二中可以点击输入下一期看
数据说话 应子分析梦幻口袋版的优势
  梦幻口袋iOS版正式上线了,想必还有很多玩家梦幻口袋版不太了解,下面就请跟随应子一起来仔细探究梦幻口袋版的玩家对玩家角色成长到底有多少的帮助。(再次提醒:iOS版本用户订阅虽然要先花费6块钱,但是订阅成功就能立刻获得600精力(
推荐6款能帮忙写论文的AI网站工具集合
以下是 6 款能帮忙写论文的 AI 网站工具集合:功能强大且全面的 AI 论文写作助手,专为学术研究者设计。能在 10 分钟内产出高达 3 万字的高质量论文初稿,并提供详细的论文大纲,还允许用户上传资料进行 “材料投喂” 以优化内容,其核心功
薄膜穿刺试验仪:精准量化薄膜性能的必备工具
一、引言在包装材料科学领域,薄膜穿刺性能是衡量其质量的关键指标之一。为确保薄膜在实际应用中能够抵御各类潜在穿刺源的挑战,济南三泉中石推出了CCY-02型薄膜穿刺试验仪,该仪器专为精准量化薄膜穿刺力而设计。二、仪器特点与优势CCY-02
手机百度seo快速排名,手机端百度seo
移动友好的网站设计:确保您的网站在移动设备上能够良好展示和快速加载。移动用户对于速度和用户体验有更高的要求,优化网站结构和响应式设计是提高排名的第一步。优化网站的加载速度:移动设备上的用户更加注重速度体验,因此优化网站的加
深化公安交管“放管服”改革10项便民利民服务措施实施细则
一、推行小型汽车驾驶证全国“一证通考”一是明确实施范围。小型汽车驾驶证全国“一证通考”自2019年6月1日起全国统一实施,适用于内地居民和取得港澳台居民居住证的港澳台居民初次申领、增驾小型汽车驾驶证(准驾车型为C类),但不包括持
银行柜面年终个人工作总结(最新6篇)
作为一名银行柜员我也需要把工作做的更加到位,这给我的感觉是很好的,我会认真的去做好自己的本职,下面是小编为大家整理的银行柜面年终个人工作总结(最新6篇),希望大家阅读之后有所收获。转眼间20xx年的年末就到来了,前段时间整日忙
永劫无间提升等级有奖励么,永劫无间通行证一级多少金块
永劫无间无常赛季通行证奖励内容一览购买通行证之后就能获取到无畏的精品时装【行空裘】和华贵靡丽的崔三娘极品时装【巨鲸客】。 等到通行证115级就能解锁顾清寒典雅矜贵的极品时装【藏雨阁主】。 还有极品武器太刀皮肤金一文字。 永劫无间
相关文章
推荐文章
发表评论
0评