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

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

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

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


原理


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

也就是每个像素点对应一个 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 的质量进行压缩。



相关文章
|
10月前
|
前端开发 JavaScript
前端必看的8个HTML+CSS技巧 (六) 裁剪图像的动画
前端必看的8个HTML+CSS技巧 (六) 裁剪图像的动画
133 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等)
1123 1
|
Web App开发 存储 缓存
前端性能精进之浏览器(三)——图像
前端性能精进之浏览器(三)——图像
|
前端开发
web前端-HTML图像,表格,列表的使用
web前端-HTML图像,表格,列表的使用
297 0
|
移动开发 前端开发 HTML5
Web前端开发笔记——第二章 HTML语言 第五节 图像标签
Web前端开发笔记——第二章 HTML语言 第五节 图像标签
Web前端开发笔记——第二章 HTML语言 第五节 图像标签
|
前端开发 iOS开发 Windows
【网页前端】CSS样式表进阶之图像的灵活使用与拓展知识(二)
本期主要介绍CSS样式表进阶之图像的灵活使用与拓展知识
165 0
【网页前端】CSS样式表进阶之图像的灵活使用与拓展知识(二)
|
前端开发
【网页前端】CSS样式表进阶之图像的灵活使用与拓展知识(一)
本期主要介绍CSS样式表进阶之图像的灵活使用与拓展知识
137 0
【网页前端】CSS样式表进阶之图像的灵活使用与拓展知识(一)
|
前端开发
#yyds干货盘点# 前端歌谣的刷题之路-第三题-图像标签属性
#yyds干货盘点# 前端歌谣的刷题之路-第三题-图像标签属性
107 0
#yyds干货盘点# 前端歌谣的刷题之路-第三题-图像标签属性
|
前端开发
web前端-HTML图像,表格,列表的使用
(一)🍁HTML图像 通过使用html,可以在文档中显示图像。 🔥1.图像标签img和源属性src 在 HTML 中,图像由 < img >标签定义。src属性填图片的url地址或者本地路径。
web前端-HTML图像,表格,列表的使用
|
前端开发
web前端学习(三十)——CSS3图像透明/不透明、拼合技术的相关设置
web前端学习(三十)——CSS3图像透明/不透明、拼合技术的相关设置
web前端学习(三十)——CSS3图像透明/不透明、拼合技术的相关设置

热门文章

最新文章

  • 1
    从前端视角聊聊通义灵码使用经验,如何更好地提升研发效率
  • 2
    VSCode AI提效工具,通义灵码前端开发体验
  • 3
    前端跨域问题解决Access to XMLHttpRequest at xxx from has been blocked by CORS policy
  • 4
    【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
  • 5
    大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
  • 6
    以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
  • 7
    【01】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-项目开发实战-优雅草卓伊凡拟开发一个一站式家政服务平台-前期筹备-暂定取名斑马家政软件系统-本项目前端开源-服务端采用优雅草蜻蜓Z系统-搭配ruoyi框架admin后台-全过程实战项目分享-从零开发到上线
  • 8
    无前端经验如何快速搭建游戏站:使用 windsurf 从零到上线的详细指南
  • 9
    【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布