前端优化指南:我们该怎么去压缩图像?

简介: 前端优化指南:我们该怎么去压缩图像?

在网站性能优化中,图像的影响比其他大部分内容都要严重。

本文我们来聊聊如何在前端工程化中优化图像。


原理


图像是由很多个像素点组成的,在电脑上以电脑方阵的形式表示。

也就是每个像素点对应一个 rgb 值。只有采取这种做法的图片格式才是真正未被压缩的格式,比如 bmp,全称 bitmap。

image.png

但是这种格式的图片体积过大,加载速度慢,已经逐渐被淘汰了。

如今主流的图片格式都是压缩过的图片格式,主流的比如 png 和 jpeg。

jpeg 压缩的思路是把一张图片切割成多个小格子,把每个格子中相同的 rgb 值转换为 YUV(亮度、色调、饱和度),再进行量化就可以降低图片的整体体积。

png 压缩的思路是复用相同的 rgb 值来降低体积。

但是在实际中具体的图像压缩过程非常复杂,本文不展开讲,我们主要来看看目前业界主流的做法。


主流打包器的做法


图像压缩时通常会有一个 quality 参数,表示质量,最低为 1,最高为 100。质量越高体积越大,质量越低体积越小。

通常建议为 75-80,不建议小于 60。

webpack 的压缩主要是依靠 image-minimizer-webpack-plugin 这个插件,它的底层依赖了 imagemin 这个库。

rollup由于更偏向于 JavaScript 库的打包,所以它会利用 @rollup/plugin-image 将图片打包成 base64 编码的格式,底层使用了 mini-svg-data-uri。

next/image 采用 sharp 来压缩图像,默认的质量是 75。

parcel 也是采用了 sharp 来压缩图像。


sharp vs imagemin vs jimp


我通过 npmtrends 对比了几个图像压缩库的使用趋势。

image.png

并且从其中又挑选了最主流的三个图像压缩库做对比,它们分别是 sharp、imagemin 和 jimp。

为了直观的对比它们的差异,我做了一个在线图像压缩的网站。

www.webbuild.me/compress-im…

image.png

这个网站和其他图片压缩网站不同的地方是,它除了具备基本的 jpg、png 压缩、批量压缩、转换 webp、选择压缩质量以外,还可以选择不同的压缩器。

我选择了三张图片进行压缩对比:

格式 质量 压缩前 压缩后 转换 webp 后
sharp jpeg 75 266kb 138kb 94kb
imagemin jpeg 75 266kb 114kb 94kb
jimp jpeg 75 266kb 174kb 不支持
sharp jpeg 75 557kb 516kb 239kb
imagemin jpeg 75 557kb 436kb 239kb
jimp jpeg 75 557kb 682kb 不支持
sharp png 75 66kb 23kb 9kb
imagemin png 75 66kb 19kb 9kb
jimp png 75 66kb 88kb 不支持

其实很好看出,imagemin 在 jpeg 和 png 的优化能力上最强,webp 模式下 sharp 和 imagemin 没有区别。jimp 会莫名其妙的负压缩。

jimp 的优势是不依赖 runtime 平台,它是零依赖的纯 JavaScript 实现。

sharp 和 imagemin 都依赖特定平台,但是它们在压缩能力上更加优秀。

不过 sharp 更加成熟和稳定,没有特殊要求,还是建议首选 sharp。


总结


作为打包网站类应用来讲的话,主流的方案很简单:

  • 体积小的图片(通常指小于 10kb)转换为 base64。
  • 体积大的图片(通常值大于 10kb)使用 webp 格式。
  • 体积大但不是特别重要的图片,建议按照 75 的质量进行压缩。



相关文章
|
前端开发 JavaScript
前端必看的8个HTML+CSS技巧 (六) 裁剪图像的动画
前端必看的8个HTML+CSS技巧 (六) 裁剪图像的动画
375 0
|
存储 Web App开发 编解码
图片:前端展示图像(img 、picture、svg、canvas )及常用图片格式(PNG、JPG、JPEG、WebP、GIF、SVG、AVIF等)
图片:前端展示图像(img 、picture、svg、canvas )及常用图片格式(PNG、JPG、JPEG、WebP、GIF、SVG、AVIF等)
2402 1
|
移动开发 前端开发 HTML5
Web前端开发笔记——第二章 HTML语言 第五节 图像标签
Web前端开发笔记——第二章 HTML语言 第五节 图像标签
Web前端开发笔记——第二章 HTML语言 第五节 图像标签
|
前端开发 iOS开发 Windows
【网页前端】CSS样式表进阶之图像的灵活使用与拓展知识(二)
本期主要介绍CSS样式表进阶之图像的灵活使用与拓展知识
394 0
【网页前端】CSS样式表进阶之图像的灵活使用与拓展知识(二)
|
前端开发
【网页前端】CSS样式表进阶之图像的灵活使用与拓展知识(一)
本期主要介绍CSS样式表进阶之图像的灵活使用与拓展知识
418 0
【网页前端】CSS样式表进阶之图像的灵活使用与拓展知识(一)
|
前端开发
#yyds干货盘点# 前端歌谣的刷题之路-第三题-图像标签属性
#yyds干货盘点# 前端歌谣的刷题之路-第三题-图像标签属性
227 0
#yyds干货盘点# 前端歌谣的刷题之路-第三题-图像标签属性
|
Web App开发 存储 缓存
前端性能精进之浏览器(三)——图像
前端性能精进之浏览器(三)——图像
|
前端开发
web前端-HTML图像,表格,列表的使用
(一)🍁HTML图像 通过使用html,可以在文档中显示图像。 🔥1.图像标签img和源属性src 在 HTML 中,图像由 < img >标签定义。src属性填图片的url地址或者本地路径。
web前端-HTML图像,表格,列表的使用
|
前端开发
web前端学习(三十)——CSS3图像透明/不透明、拼合技术的相关设置
web前端学习(三十)——CSS3图像透明/不透明、拼合技术的相关设置
web前端学习(三十)——CSS3图像透明/不透明、拼合技术的相关设置
|
Web App开发 移动开发 前端开发
前端基础知识概述 -- 移动端开发的屏幕、图像、字体与布局的兼容适配 (下)
前端基础知识概述 -- 移动端开发的屏幕、图像、字体与布局的兼容适配 (下)
854 0
前端基础知识概述 -- 移动端开发的屏幕、图像、字体与布局的兼容适配 (下)

热门文章

最新文章

  • 1
    前端如何存储数据:Cookie、LocalStorage 与 SessionStorage 全面解析
    1390
  • 2
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
    667
  • 3
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
    524
  • 4
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
    540
  • 5
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
    623
  • 6
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
    812
  • 7
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
    1607
  • 8
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(三):元素继承关系、层叠样式规则、字体属性、文本属性;针对字体和文本作样式修改
    381
  • 9
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
    1323
  • 10
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
    641