通过图片优化,我将网站大小减少了62%

news/2024/5/13 7:54:50/文章来源:https://blog.csdn.net/weixin_34137799/article/details/89122399

图片是Web提供的最基本的一种内容类型。人们都说一张图片胜过千言万语。但如果你一不小心,它也可能占用你好几兆带宽。

虽说Web图像应该尽可能清晰明快,但文件大小必须是可管理的,以便保持较快的加载速度,并且应该将数据使用保持在可接受的水平。

在我的网站上,我发现主页的大小超过了1.1MB,其中图像占了88%。我也意识到我提供的图片比实际需要的要大(比如分辨率)。显然,还有很大的优化空间。

\"\"

我开始阅读由Addy Osmani撰写的“Essential Image Optimization”电子书(),并开始在我的网站上尝试他的建议。然后我又研究了一些响应式图像方面的知识,并也将其应用在我的网站上。

这样就可以将页面大小降至445KB,减少了约62%!

\"\"

本文将介绍我如何优化主页大小,将其提升到更可管理的水平。

什么是图像压缩?

压缩图像是指在保持可接受的视觉质量水平的同时减小图像文件的大小。我使用imagemin来压缩我网站上的图像。

要使用imagemin,请确保已安装了Node.js,然后打开终端窗口,cd到项目的文件夹,并运行以下命令:

npm install imagemin

然后创建一个名为imagemin.js的新文件,并粘贴以下内容:

const imagemin = require('imagemin');const PNGImages = 'assets/images/*.png';const JPEGImages = 'assets/images/*.jpg';const output = 'build/images';

你可以根据具体的项目结构随意修改PNGImages、JPEGImages和output的值。

要进行图像压缩,你需要根据要压缩的图像类型安装一些插件。

使用MozJPEG压缩JPEG

为了压缩JPEG图像,我使用了Mozilla的MozJPEG,它可以通过imagemin-mozjpeg作为imagemin的插件使用。你可以通过运行以下命令来安装它:

npm install imagemin-mozjpeg

然后将以下内容添加到imagemin.js文件中:

const imageminMozjpeg = require('imagemin-mozjpeg');const optimiseJPEGImages = () =\u0026gt;  imagemin([JPEGImages], output, {    plugins: [      imageminMozjpeg({        quality: 70,      }),    ]  });optimiseJPEGImages()  .catch(error =\u0026gt; console.log(error));

你可以在终端中输入node imagemin.js来运行这个脚本。这样就会处理所有的JPEG图像,并将优化过的图像放在build/images文件夹中。

我发现将质量设置为70可以得到足够好的图像,但是你的要求可能会不一样,所以请根据你的需要设置具体的值。

MozJPEG默认会生成渐进式JPEG,在加载图像时,从低分辨率逐渐加载到高分辨率,直到图像加载完毕。由于它们的编码方式不一样,所以往往会比基线JPEG小一些。

你可以使用这个命令行工具来检查JPEG图像是否是渐进式的。

Addy Osmani已经详细介绍过使用渐进式JPEG的优点和缺点。

在我看来,它是利大于弊的,所以我使用了默认设置。

如果你更喜欢使用基线JPEG,可以在选项对象中将progressive设置为false。此外,更多的选项设置请参考imagemin-mozjpeg页面。

使用pngquant优化PNG图像

pngquant是我用来优化PNG图像的首选工具,你可以通过imagemin-pngquant插件来使用它:

npm install imagemin-pngquant

然后将以下内容添加到imagemin.js文件中:

const imageminPngquant = require('imagemin-pngquant');const optimisePNGImages = () =\u0026gt;  imagemin([PNGImages], output, {    plugins: [      imageminPngquant({ quality: '65-80' })    ],  });optimiseJPEGImages()  .then(() =\u0026gt; optimisePNGImages())  .catch(error =\u0026gt; console.log(error));

我发现将quality设置为65到80可以在文件大小和图像质量之间获得良好的折衷。

使用这些设置,我可以将网站截图从913 KB减到到187 KB,而不会出现任何明显的视觉方面的质量损失。文件大小整整减少了79%!

下面是这两个文件,可以下载下来自己去判断:

原始图像(913 KB):

\"\"

  • 优化过的图像(187 KB)

\"\"

使用WebP图像(需要浏览器支持)

WebP是Google推出的一种相对较新的图像格式,旨在通过编码无损和有损格式的图像获得较小体积的图像,这让它成为JPEG和PNG的绝佳替代品。

WebP图像的视觉质量通常与JPEG和PNG相当,但文件大小要小得多。例如,当我将上面的屏幕截图转换为WebP时,我得到了一个88 KB的文件,其质量与913 KB的原始图像相当。文件减小了90%!

看看这三张图片,你能分辨出来吗?

  • 原始PNG图像(913 KB)

\"\"

  • 优化过的PNG图像(187 KB)

\"\"

  • WebP图像(88 KB),可在Chrome或Opera中查看:https://freshman.tech/assets/dist/images/articles/freshman-1600.webp

我认为它们在视觉质量方面是差不多的,但节省的文件大小却是很可观的。

现在我们知道,在可能的情况下尽可能使用WebP格式,但要注意,现在它还不能完全取代JPEG和PNG,因为浏览器对WebP的支持并不普遍。

在撰写本文时,Firefox、Safari和Edge还不支持WebP。

\"\"

不过,caniuse.com网站的数据显示,全球有超过70%的用户在使用支持WebP的浏览器。这意味着你可以使用WebP图像为大约70%的用户提高网页加载速度。

让我们来看看在Web上提供WebP图像的具体步骤。

将JPEG和PNG转换为WebP

使用imagemin-webp插件将JPEG和PNG图像转换为WebP,这个非常简单。

在终端中运行以下命令来安装它:

npm install imagemin-webp

然后将以下内容添加到imagemin.js文件中:

const imageminWebp = require('imagemin-webp');const convertPNGToWebp = () =\u0026gt;  imagemin([PNGImages], output, {    use: [      imageminWebp({        quality: 85,      }),    ]  });const convertJPGToWebp = () =\u0026gt;  imagemin([JPGImages], output, {    use: [      imageminWebp({        quality: 75,      }),    ]  });optimiseJPEGImages()  .then(() =\u0026gt; optimisePNGImages())  .then(() =\u0026gt; convertPNGToWebp())  .then(() =\u0026gt; convertJPGToWebp())  .catch(error =\u0026gt; console.log(error));

我发现,将quality设置为85可以得到与PNG质量相当的WebP,但文件却要小得多。对于JPEG,我发现将quality设置为75可以在视觉质量和文件大小之间获得适当的平衡。

说实话,我还在试验这些值,所以不把它们作为推荐值,更多信息请查看imagemin-webp页面。

在HTML中使用WebP图像

在得到WebP图像后,可以使用下面的标签为支持WebP的浏览器提供WebP图像,同时为不支持WebP的浏览器提供等效(优化)的JPEG或PNG后备。

\u0026lt;picture\u0026gt;    \u0026lt;source srcset=\u0026quot;sample_image.webp\u0026quot; type=\u0026quot;image/webp\u0026quot;\u0026gt;    \u0026lt;source srcset=\u0026quot;sample_image.jpg\u0026quot; type=\u0026quot;image/jpg\u0026quot;\u0026gt;    \u0026lt;img src=\u0026quot;sample_image.jpg\u0026quot; alt=\u0026quot;\u0026quot;\u0026gt;\u0026lt;/picture\u0026gt;

支持image/webp媒体类型的浏览器将下载WebP图像并显示它,而其他浏览器将下载JPEG图像。

不支持\u0026lt;picture\u0026gt;的浏览器将跳过所有source,并加载底部img标签的src属性所定义的内容。可以说,我们已经对我们的页面进行了渐进式增强,可以支持各种浏览器。

\"\"

请注意,不管怎样,img标签是实际渲染在页面上的内容,因此它是语法的必需组成部分。如果省略img标签,就不会渲染任何图像。

\u0026lt;picture\u0026gt;标签和所有source都在那里,浏览器可以选择要使用的图像版本。在选择了需要使用的source后,URL将被提供给img标签,然后相应的图像就会被显示在页面上。

这意味着你无需为\u0026lt;picture\u0026gt;或source设置样式,因为浏览器不会渲染这些标签。因此,你可以像以前一样继续为img标签设置样式。

英文原文:https://medium.freecodecamp.org/image-optimization-558d9f449e3

更多内容,请关注前端之巅。

\"\"
会议推荐

2019年6月,GMTC全球大前端技术大会2019即将到来。小程序、Flutter、移动AI、工程化、性能优化…大前端的下一站在哪里?点击下图了解更多详情。

\"\"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_783548.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hadoop网站日志数据清洗——正则表达式实现

周旭龙前辈的Hadoop学习笔记—网站日志分析项目案例简明、经典,业已成为高校大数据相关专业的实验项目。上周博主也完成了这个实验,不同于周前辈使用特殊符号切割字符串得到数据的做法,博主使用了正则表达式来匹配数据。在此将我的思路及代码…

网站开发流程以及HTML5简介(八)

2019独角兽企业重金招聘Python工程师标准>>> 第一大原因: 它是未来,开始用吧! 最大的原因今天你就开始使用HTML5是因为它是未来,不要掉队了!HTML5不会往每个方向发展,但是更多的元素已经被很多公…

编写python爬虫采集彩票网站数据,将数据写入mongodb数据库

1.准备工作: 1.1安装requests: cmd >> pip install requests 1.2 安装lxml: cmd >> pip install lxml 1.3安装wheel: cmd >> pip install wheel 1.4 安装xlwt: cmd >> pip install xlwt 1.5 安装pymongo: cmd >> pip install pymon…

中国电信北京研究院发布“2016年上半年网站安全报告”

提要:中国电信北研院副院长陈运清在致辞中表示,信息安全已经上升到国家战略高度,随着“互联网”时代到来,以及互联网新业务和新技术的快速发展,信息安全防护的要求越来越高。中国电信充分利用遍布全网的智能管道、丰富…

.NET也有春天及高性能网站架构实践

.NET也有春天及高性能网站架构实践 在本次专访之前,笔者一直都对.NET这个平台有所偏见,或者说是看不到.NET的优势,对Java Web、PHP、Ruby等更加看好,而之后SSH、RoR、LAMP等的流行也让笔者对这个观点更加坚信。然而在浏览完赵桂华…

推荐8个超棒的学习 jQuery 的网站

推荐8个超棒的学习 jQuery 的网站 根据国外科技网站 W3Techs 一项调查了近100万个网站数据显示,jQuery是目前最流行的 JavaScript 库。对于初学者来说,有的时候很难找到一个好的学习jQuery的网站,所以本文收集了8个很棒的 jQuery 学习网站推…

自学宝典:10个学习Android开发的网站推荐

自学宝典:10个学习Android开发的网站推荐 1. Android Developers 作为一个Android开发者,官网的资料当然不可错过,从设计,培训,指南,文档,都不应该错过,在以后的学习过程中慢慢理…

利用squid反向代理提高网站性能

利用squid反向代理提高网站性能本文在介绍 squid 反向代理的工作原理的基础上,指出反向代理技术在提高网站访问速度,增强网站可用性、安全性方面有很好的用途。作者在具体的实验环境下,利用 DNS 轮询和 Squid 反向代理技术,实现了…

MalwareMustDie关闭博客网站 抗议NSA利用恶意软件攻击公共机构

近期,国外一篇博客披露,著名的反恶意软件组织MalwareMustDie决定关闭其博客网站,以抗议NSA(美国国家安全局)利用黑客工具入侵无辜国家的教育和公共服务器。 文章指出,Shadow Brokers(影子经纪人…

阿里云 配置网站 安装nginx 访问不了公网ip

转载自:https://blog.csdn.net/LJFPHP/article/details/78670459 一、开始找原因 在浏览器输入:http://ip,正常的话,会有页面,welcome to nginx 我这里是浏览器访问失败, 查找原因: 1、在服…

asp.net免费网站三剑客:WebMatrix + MojoPortal + SQLCE

一个免费发布软件,一个免费CMS(内容管理系统),一个免费数据库,正好完成一个免费软件的部署。大致过程:1. 先从这里找到MojoPortal的CE版本:http://mojoportal.codeplex.com/releases/view/64508…

用户体验分析:以 “师路南通网站” 为例

作业目标: 对比UMU学习平台、学生安全教育平台,针对师路南通,开展UX分析。基于实例分析,体会用户体验设计的7条准则 作业要求: 基于我们列出的 7 条UX评价准则,分析“师路南通” 在用户体验设计方面让你觉得…

基于阿里云服务器搭建网站

前面写了《基于PHP搭建网站开发环境》的三节内容,主要用于PC端开发/调试/测试网站所需要搭建的开发环境。当然,最重要的还是网站开发成功之后,如何让很多人通过外网连接到网站呢? 1、服务器:服务器选择的是阿里云的&a…

阿里云建站的基本流程

1. 云服务器 ECS 1.1 概述 云服务器ECS实例,即阿里云服务器,以下简称 ECS 实例。 1.2 创建 ECS 实例 1.2.1 购买 ECS 实例 在阿里云官网找到:产品->云计算基础服务->弹性计算->云服务器 ECS 。 在购买之前可以领取阿里云优惠劵哦…

阿里云建站云企业官网标准版/高级版/尊贵版功能对比及选择方法

阿里云建站云企业官网标准版、高级版和尊贵版有什么区别?云集市场网分享阿里云建站定制云企业官网版本功能区别亮点及选择方法: 云企业官网标准版/高级版/尊贵版对比 阿里云建站云企业官网定制分为标准版、高级版和尊贵版三个版本,云集市场…

最全面的WordPress建站教程,零基础30分钟学会建站

宝塔面板添加WordPress站点 一、建站准备条件 条件1:阿里云服务器一台。原则上有台服务器就好了,不过我一般喜欢用大品牌,稳定和安全。条件2: 阿里云域名一个。在哪家买的服务器,就用哪家的域名,反之&…

快来建造自己的网站吧,阿里云免费教程哦

主要亮点: 亮点一:标配阿里云空间,无需技术,会打字就会建网站 亮点二:选定模板,预置1000套精美网站模板,覆盖上百行业,随意切换,简单修改,网站- 即可上线&am…

没有使用面板的云服务器(手动搭建环境的云服务器)备份网站文件和数据库的命令及教程

对于使用了面板(如宝塔面板)的云服务器来说,备份网站文件和数据库相当简单,但是没有使用面板的云服务器(手动搭建环境的云服务器)备份数据就稍显麻烦了,前几日有一朋友让我帮忙备份一下&#xf…

使用宝塔面板搭建WordPress网站(图文教程)

使用宝塔面板搭建WordPress网站 图片来自宝塔官网 现在搭建一个自己的网站已经不是一件难事了,有出色的WordPress程序,有价格实惠的云服务器,有像七牛云这种对草根站长友好的云存储服务,还有像宝塔面板这类易操作的面板&#xff…

阿里云建站全教程:域名注册/云服务器/环境搭建详细流程

小白如何创建网站部署环境?建立一个网站需要多少钱呢?笔者分享 个人/企业建网站的基本步骤和流程。从域名购买解析、到云服务器购买搭建环境,最后到上传程序,具体教程如下: 第一步、注册域名 进入(万网官…