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

news/2024/5/15 19:03:40/文章来源:https://blog.csdn.net/weixin_33929309/article/details/89092275

图片是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_808014.aspx

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

相关文章

微信公众号用户与网站用户的绑定方案

点击访问原文 您还可以加入全栈技术交流群(QQ群号:254842154) 现在很多网站都已经建立了一套完整的用户账号体系,基于这套体系,再做其他应用的用户扩展就非常方便。例如,有了微软的outlook账户&#xff0c…

Anonymous几天之内攻陷500多个中国网站

根据CNET的报道,Anonymous***激进组织已经在几天之内黑掉了超过500个中国政府/商业网站,并号召中国***加入他们。 The hacked Web site for the Central Business District in Chengdu, China. (Credit: Screenshot by Steven Musil/CNET)转载于:https:/…

SharePoint2013 App 开发中 自定义网站栏,内容类型,列表。

打开vs2012新建项目。 选择Sharepoint hosted模式。 一个app开发的项目就创建好了。 创建网站栏 1.右键项目》添加》新建项》Site column 创建一个网站栏 2.在element.xml中添加以下字段。 <?xml version"1.0" encoding"utf-8"?> <Elements xml…

SEO的作用是什么?为什么要学习SEO?

SEO的作用是什么&#xff1f; 让更多的用户更快的找到他想找的东西&#xff1b;可以让相关关键词排名靠前&#xff0c;满足用户需求&#xff1b;让有需求的人首先找到你&#xff1b;提供搜索结果的自然排名&#xff0c;增加可信度&#xff1b;让你的网站排名自然靠前&#xff0…

服务器更新网站,分享自动更新网站的方法

今天来聊聊一篇关于分享自动更新网站的方法的文章,现在就为大家来简单介绍下分享自动更新网站的方法,希望对各位小伙伴们有所帮助。详细原理&#xff1a;1) Windows服务端&#xff1a;Windows服务采用.Net Framework2.0框架&#xff0c;所以使用时应该先安装好.Net Framework2.…

wdcp后台创建网站后,总是显示403界面

后台创建站点后后&#xff0c;域名已解析&#xff0c;但无法打开默认页面&#xff0c;创建网站后会有一个默认的index.html 存在于public_html下面的&#xff0c;我用FTP 查看是有的&#xff0c;但用域名却无法访问&#xff0c;总是显示403界面 经查看&#xff0c;发现端口管理…

用合作的态度来提升网站收录与排名

合作共赢&#xff0c;这个词被应用到各行各业是不无道理的&#xff0c;在SEO行业里同样如此。在多年前&#xff0c;那是SEO飞速发展的时代&#xff0c;我们见证了许许多多的SEO神话&#xff0c;各种各样一夜暴富的神人&#xff0c;但为什么近几年这样的神话越来越少?这个问题很…

python制作网页服务器_十分钟上手Python开发网站服务器

如何一键安装Python开发环境&#xff1f;如何使用Jupyter Notebook开发Flask网站服务器&#xff1f;跟我一起来上手Python编程&#xff0c;十分钟开发一个动态网站服务器程序。 Python编程 首先请安装Anaconda软件。 登录https://www.anaconda.com官网&#xff0c;下载安装Indi…

脑图学习架构设计之二:网站架构模式

转载于:https://blog.51cto.com/dba10g/1610906

IE无法打开internet网站已终止操作的解决的方法

用IE内核浏览器的朋友&#xff0c;或许不经意间会碰到这样滴问题&#xff1a;打开某个网页时&#xff0c;浏览器“嘣”跳出一个提示框“Internet Explorer无法打开Internet 站点...已终止操作”。而大多数情况下该页面甚至非常可能看起来已经载入完成&#xff0c;内容能够全然显…

iPhone App创建与审核步骤二:如何在developer.apple.com网站中设置App预览和截屏以完成App上架

iPhone App创建与审核步骤二&#xff1a;如何在developer.apple.com网站中设置App预览和截屏以完成App上架&#xff0c;根据图标规范RAD Studio 10.4 for delphi XE 或RAD Studio 10.3 for delphi 如何制作AppIcon图标 一、APP 预览和截屏 截屏规范 设备尺寸或平台 截屏尺寸 …

移动端网站设计参考规范(初稿)

找了一些这方面的资料&#xff0c;都是零零散散的&#xff0c;东西太多看起来比较累人&#xff0c;所以把一些有用的实际数据提炼了出来&#xff0c;仅供参考。 一、约定规范 团队内部使用相同版本Photoshop&#xff0c;Illustrator文件命名规范“版本号页面内容修改最新序号”…

Iphone App创建与审核步骤一:如何在developer.apple.com网站中设置你的IOS开发所需的Certificates, Identifiers Profiles

Iphone App创建与审核步骤一&#xff1a;如何在developer.apple.com网站中设置你的IOS开发所需的Certificates, Identifiers & Profiles&#xff08;证书、App ID及配置文件&#xff09; 步骤一、Apple Developer App的注册于账户管理 步骤二、在手机上打开最新版本的Appl…

【Bootstrap3.0建站笔记一】表单元素排版

1、文字和输入框前后排列&#xff1a; 代码&#xff1a; <div class"row"><div class"col-lg-12"><div class"panel panel-default"><div class"panel-heading"><h2>条件查找</h2></div>&l…

网站只有php怎么办,想获取一个网站的网站内容,但总是获取不到该怎么办

是这个网站&#xff1a;http://www.reg007.com/search。比如说&#xff0c;我在输入框里面输入了981267080qq.com他就会跳转到http://www.reg007.com/search?q981267080-at-qq.com。我想用php的file_get_contents获取http://www.reg007.com/search?q981267080-at-qq.com的网页…

配置Nginx网站https访问、http共存访问、http强制跳转到https

最近公司一客户要求服务器与客户端之间传输内容是加密的&#xff0c;通过https协议访问&#xff0c;于是使用OpenSSL生成证书&#xff0c;默认情况下ssl模块并未被安装&#xff0c;如果要使用该模块则需要在编译nginx时指定–with-http_ssl_module参数&#xff0c;需要确保机器…

php 随机在文章中添加锚文本_原创文章SEO技巧——嘉定行吟科技

一、网站内容关键词的选定是根据自动分词许多SEO优化人员&#xff0c;对于网站页面内容的选择大多都是在关键词标签中出现的&#xff0c;但实际上这是一种错误的方法&#xff0c;其中一些只是优化人员的主观看法&#xff0c;没有从搜索引擎的规则上考虑&#xff0c;如果优化人员…

网站暴库原理与方法剖析

2019独角兽企业重金招聘Python工程师标准>>> 一、方式 暴库的方式有多种多样&#xff0c;我知道的就有3种以上&#xff0c;常见的暴的方法有&#xff1a;%5c类暴,conn.asp暴,ddos暴等等 二、原理 “%5c”暴库法&#xff0c;它不是网页本身的漏洞&#xff0c;而是利用…

如何用自己电脑做服务器,绑定域名建一个个人网站

使用自己的电脑&#xff0c;下载一个tomcat服务器&#xff0c;并将域名解析到本机&#xff0c;这样就可以发布自己的网站了。不过&#xff0c;关机之后网站便登不上去了。这样做只是为了我们可以更好的开发调试自己的工程&#xff0c;网站上线之后可以让更多的朋友帮你找bug。这…

www.beishuo.net 网站打开异常慢的原因

现象&#xff1a;客户投诉http://www.beishuo.net/ 网站在移动线路下打不开或者打开异常缓慢&#xff08;墨绿色是服务器向客户端发送数据的时间&#xff0c;显得非常耗时&#xff09;分析&#xff1a;这个CASE比较有意思&#xff0c;我在用科来分析数据包的时候发现服务器的重…