提升网站用户体验—WebP 图片的高效使用

news/2024/4/29 5:20:24/文章来源:https://blog.csdn.net/weixin_33807284/article/details/89428375

提升网站用户体验—WebP 图片的高效使用

一.WebP 的由来

现代图像压缩技术对我们的生活方式影响很大。数码相机能将上千张高质量图片存储到一张内存卡里、智能手机可以与邻近设备快速分享高分辨率的图片、网站与手机等移动设备能快速展示各种富媒体。

然而,如果图片只能以最原始的格式进行存储的话,以上所有都只是纸上空谈。

在 APP、浏览器或 PC 端、还是移动端等各种设备里,通常使用 JPEG 这种损耗较大的格式对图片进行高效率的管理,而使用 PNG 这种失真较小的格式传送图表、图标以及图画等。

然而,在过去几年间,尽管视频的格式发展迅速,图像格式却有些不尽人意。

直到 2010 年,谷歌推出了全新的 WebP(发音为 「Weppy」)格式,一种开源且同时支持有损与无损压缩的图片格式,才改善了这一现状。

WebP 格式文件要比常用的 JEPG 与 PNG 格式小得多,而且还支持许多高级特性,比如有损模式下的透明性,在低质、高压缩设置下更为养眼的图片质量等。

二.WebP 的意义

前两年 Google 进行了一个统计调查:如果亚马逊页面加载每慢 100ms,将影响他们 1% 的收入;如果谷歌页面加载慢 500ms ,流量将锐减 20%,这个数据到现在只会更加恐怖!

评价网站性能好坏的一个主要指标就是页面响应时间,也就是说用户打开完整页面的时间。IT 业内的人一般都了解,普通的基于 JEPG 还有 PNG 图片格式的网页,其图片资源加载往往都占据了页面耗时的主要部分,技术运维人员需要做的就是要 BOSS 知道这个事实而已,进而推动 WebP 技术的使用。

现在业内的很多前端监控工具都是基于拨测的模拟访问。假设,在网络良好、用户机器良好、用户使用 pc 有线网、运营商及 DNS 无任何问题等等情况下的访问,这是真实的用户访问么?!!

像下图这样的,针对用户访问页面时间的真实监控,才能用来作为推动某项技术落地于网站的有力证据。
网站性能优化— WebP 全方位介绍

然后,再通过类似资源加载耗时这样的功能,就像上面说的那样,基于真实的用户体验来抓出拖慢页面响应时间的真正元凶——图片!

网站性能优化— WebP 全方位介绍

笔者之前做过前端优化的工作,国内外的前端性能优化工具也使用了不少,最近也询问了周围做性能优化的朋友,现阶段可以较好实现上面两个功能的工具有:
OneAPM Browser Insight、AppDynamics、Ruxit,大家有兴趣的话可以去尝试下。

WebP 的意义就在于此,通过较小的文件来降低带宽的消耗,为线上服务降低流量成本,更快的展示和更短的图像共享时间,为网站及移动应用用户带去更好的用户体验。

在本文中,主要介绍 Cloudinary 基于云的即时 WebP 图像生成技术以及 Google 开发的通过代码行来实现的 WebP 图像的生成。

三.WebP 的强大优势

1.同等质量但是图片更小

通过 Cloudinary 这个软件,简单地改变 CDN 提供的 URL 的文件扩展名,就可以进行图像格式的即时转换。

例如,有一张以公共 ID 名 「sample」 上传到云的 JPG 图片,现在我们要在网站上嵌入该图像 300x200 px 的缩略图。

下图 1 是由 Cloudinary 使用 JPG 格式生成的,而图 2 是使用 WebP 格式生成的。(注意,通过谷歌 Chrome 浏览器才能正确地查看 WebP 图像)

图 1.sample.jpg 27.9KB JPG
sample.jpg

图2.sample.webp 12.4KB WebP
sample.webp

如果检查网络数据,你会发现,JPG 文件是 27.9 KB 而 WebP 文件只有 12.4 KB,而两张图片看起来几乎相同。这意味着节省了56%的带宽。如果你的网站包含了大量图片,就可以节省一半的流量,让你的网站以两倍于之前的速度加载,访问者肯定更加高兴。

如果使用客户端库,既可以在公共 ID 后面连接「.webp」,也可以将「format」参数设置为「webp」。例如,在 Ruby on Rails 和 PHP 中:

<%= cl_image_tag("sample.webp", :crop => :scale, :width => 300) %>

<pre>
<?php echo cl_image_tag("sample", array("format" => "webp", "width" => 300,

                    "crop" => "scale")); ?>

</pre>

2.压缩之后质量无明显变化!

JPG 和 WebP 都支持有损压缩格式,允许你控制目标图像的质量。

目标图像的质量和文件大小之间存在明显的折中关系。在很多情况下,可以很大程度降低图像的质量和尺寸,而用户却几乎不会注意到其中的差别。

不过,JPEG 格式的图片在质量较低时会有明显的缺陷,尤其是当图片包含微小的细节或文本时,但 WebP 格式则没有明显的缺陷,但也会在低质量设置时产生稍微模糊的图像。

你可以将 Cloudinary 的「quality」参数(或者 URL 的「q」参数)设置为1到99之间的任何值(默认值为90)来自己测试一下。

下面的例子将样本图片的质量设置为30%。图一是 JPG 图片的效果,图二是 WebP 图片的效果。

图1.sample.jpg 10.6KB

提升网站用户体验—WebP 图片的高效使用

图2.sample.webp 7.1KB WebP

提升网站用户体验—WebP 图片的高效使用

显然,只有眼尖的人才能察觉质量上的差别,质量降低后的图片仍旧保持了不错的观感,WebP 格式图片在这一点上尤为突出。30% 的质量设置下,JPG 图片的大小为 10.6KB,而 WebP 仅为 7.1KB。

相比之下,WebP 格式的图片减小了33% 的大小,而与 JPG 格式的原图相比,低质量的 WebP 格式图片只占了其四分之一大小。

下面的 Node.js 与 Django 示例会产生与上例效果相似的交付 URL。

cloudinary.image("sample.webp", { width: 300, crop: 「scale」, quality: 30 });
cloudinary.CloudinaryImage("sample.webp").image(width = 300, crop = 'scale', quality = 30)

3.完美支持无损 WebP 图像

以上所有例子中,WebP 都是有损格式,只保留了 90% 或更低的质量。

WebP 同样支持一如 PNG 格式的无损模式,这种无损模式对于栅格化的矢量图形非常有用(比如,logo),因为这类图像一旦保存为有损模式,就会出现明显的质量下降。

想要生成无损的 WebP 文件,只需将 Cloudinary 的 「quality」 变量设置为 100:

图1.cloudinary_icon.webp

提升网站用户体验—WebP 图片的高效使用

在 Ruby on Rails 也是一样:

<%= cl_image_tag("sample.webp", :quality => 100) %>
四.确定用户比例

正如上面提到的,并不是所有的浏览器都支持的 WebP 图片格式。

目前支持 WebP 的主要是 Chrome,Android 4.0+ 版本还有 Opera 浏览器。这确实是限制 WebP 推广的最大问题,技术人员需要有选择性地决定何时利用它。

但,在另一方面讲,Chrome 是相当受欢迎,尤其是针对 IT 人员或者各个行业的高素质人员来讲,所以,即使只为了提升 Chrome 用户的用户体验并且节省 Chrome 浏览器所消耗的那一部分带宽,使用 WebP 仍然是值得的。

那么问题来了,尽管 Chrome 浏览器和 Android 系统的普及程度是人尽皆知的,关于网站访客的浏览器比例,技术人员同样需要拿出一定的数据来像 Boss 证明,转化 WebP 图像这个操作是有意义的。

所以针对网站用户统计的工具就非常重要了,而且这个工具还不能是像 GA、百度统计以及 CNZZ 这样的营销工具,一定要基于真实用户访问的用户访问统计图才有说服力。

提升网站用户体验—WebP 图片的高效使用
提升网站用户体验—WebP 图片的高效使用
这个要识别起来其实很难的,因为各种机型浏览器非常复杂,目前国内外 APM (性能优化)领域涉及这个方面并且做的符合需求的工具也给大家推荐几个:
OneAPM Browser Insight、AppDynamics、NewRelic

五.通过命令行将图像转换为WebP

除了可以通过 Cloudinary 这款软件来生成 WebP 图片之外,还可以通过代码命令来生成相应的 WebP 图片。

谷歌已开发了大量实用的命令行将图像转换为 WebP,每个人都可以从谷歌开发者网站下载。当你有一个实用程序的副本之后,你可能想要将实用程序的 bin 文件夹添加到您的本地路径,这可以通过将以下代码添加到你的主目录 下的.bash_profile 文件中来实现(针对 Mac/Linux 系统)。

PATH=$PATH:"/path/to/libwebp-utilities/bin"  
export PATH  

你需要更新下引用路径来表示你的系统上 WebP 实用程序文件夹的位置。重新启动终端止,就能够访问命令行实用工具了。

另外,Mac 可以使用homebrew来安装实用程序。

brew install webp  

:homebrew 不是总能匹配项目网站的最新版的。

安装实用程序完成后,就可以使用 cwebp 将 JPEG 或 PNG 图像转换成 WebP 格式。

cwebp [options] -q quality input.jpg -o output.webp  

质量选项应该是 0 (差)到 100 (很好)之间的数字,典型的质量值大约是 80,但是你也可以多多尝试,直到文件质量和大小都让你满意。

完整的选项列表,可以使用此实用工具运行带有 -longhelp 的 cwebp 命令,或者查看帮助文档。

:也可以使用 dwebp 实用程序将 WebP 图像转换回 PNG、PAM、PPM 或 PGM 图像。

dwebp input_file.webp [options] [-o output_file]  
六.基于访客浏览器的动态 WebP 生成

就像上文说过的,为了仅针对 Chrome/Android4/Opera 的访客生成 WebP 图像,你可以使用 JS 代码根据访客的浏览器信息加载图像。

Cloudinary 的 jQuery 插件能帮助你动态地生成展示 URL,后者会即时地生成图片,再通过带有高级缓存的 CDN 快速地展示结果。

例如,你可以在 HTML 页面定义图片标签,将 「src」 属性设置为空白图片,将 「data-src」 属性设置为已经上传至 Cloudinary 的实际图片的公共 ID 值。

<img src="blank.png" width="150" height="100" data-crop="fill" data-src="sample.jpg"/>

下面的 jQuery 代码会将所有图片标签转换为动态生成的图像 URL,而不是占位的空白图片。

$('img').webpify();

该页面加载很快,无需等待图片加载。之后,上面的 jQuery 代码会动态地更新图片标签,根据访客浏览器支持 WebP 格式与否,生成 WebP 图像或 JPG 图像。

Chrome 下的结果:

<img src="http://res.cloudinary.com/demo/image/upload/c_fill,h_100,w_150/sample.webp"width="150" height="100" data-crop="fill" data-src="sample.jpg">

其他浏览器下的结果:

<img src="http://res.cloudinary.com/demo/image/upload/c_fill,h_100,w_150/sample.jpg"width="150" height="100" data-crop="fill" data-src="sample.jpg">

欲知有关 jQuery 插件的更多细节,可以点此查看文档。

七.总结

现如今,网站与移动应用的富媒体内容越来越丰富,追踪带宽使用情况、优化下载和上传时间,对于优化用户体验都是至关重要的。很明显,与 JPEG 或 PNG 相比 包括在图片大小和质量之间的平衡,以及这个新兴的格式支持的功能等方面来讲,WebP 有许多优点。

WebP 格式是帮助你优化用户体验的又一利器,虽然浏览器对 WebP 的支持仍有很多需要改进的地方,但是恰当是使用一些工具和技术,很容易体会到 WebP 的好处,也不会疏远使用不支持这种格式的浏览器的用户。

:本文改编自外文文章“How to support WebP images, save bandwidth and improve user experience” ,by Nadav Soferman ,由 OneAPM 产品运营整理改编发布.

原文地址:
http://cloudinary.com/blog/how_to_support_webp_images_save_bandwidth_and_improve_user_performance

Browser Insight 是一个基于真实用户的 Web 前端性能监控平台,能够帮大家定位网站性能瓶颈,网站加速效果可视化;支持浏览器、微信、App浏览 HTML 和 HTML5页面。想技术文章,请访问 OneAPM 官方技术博客。

本文转自 OneAPM 官方博客

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

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

相关文章

网站的伸缩性

一、两个网站的伸缩性目标 大型网站都是从小型网站逐步演化而来的&#xff0c;Google诞生的时候也只有一台服务器。中航网需要设计成一个能从廉价PC服务器演化成大型系统的架构体系。为了实现网站的伸缩性中航网要设计成以下两个维度的可分离&#xff1a; 1、服务器分离 每次分…

使用Python2.7.13+django1.11.2+vue2.0开发的个人博客网站

一、安装git https://git-for-windows.github.io/ 这是Windows下的安装地址&#xff0c;安装都是无脑next 二、在github上面下载项目 1.在本地选择一个文件目录&#xff0c;在此目录下下载项目&#xff0c;我的目录是D:\workplace\ 2.右击该目录下的空白部分&#xff0c;会看到…

大型网站架构演进(1)单机网站

初始阶段的网站一般访问量都很小(QPS<500)&#xff0c;此时只需要一台服务器就足够&#xff0c;应用程序&#xff0c;数据库和文件都放在这一台服务器上。如果是.net的话&#xff0c;通常操作系统使用windows server&#xff0c;应用程序开发使用asp.net&#xff0c;然后应用…

经济学自身利益最大化_成都网站建设:建设什么样的网站才能收获利益最大化...

成都网站建设&#xff0c;认准成都绘景志成科技&#xff01;在这个大数据的互联网时代&#xff0c;网站就是企业的经营载体&#xff0c;网站运营的结果也是企业运营利益的体现&#xff0c;那么建设什么样的网站才能协助企业实现运营利益最大化呢&#xff1f;一、建设差别化的网…

git上传网站到服务器上,git上传到远程服务器

git上传到远程服务器 内容精选换一换代码托管服务支持您将本地的代码进行Git初始化并上传到CodeHub仓库。不选择“选择gitignore”。不勾选“允许生成README文件”。如果原来是来自SVN服务器的&#xff0c;建议参考 将SVN代码库迁移到Git代码库。如果原来没有纳入过任何的版本系…

Asp.Net网站的的编译与发布原理

如下所示创建一个简单的asp.Net Web应用程序 在VS中生成解决方案之后&#xff0c;可以在项目的目录下看到以下的文件&#xff1a;当我们通过VS将网站发布出去之后&#xff0c;可以看到&#xff0c;最后生成的文件&#xff0c;如下图所示&#xff1a;我们可以发现&#xff0c;发…

中型网站搭建运行思路

转载于:https://www.cnblogs.com/shark1100913/p/5558454.html

编写计科院网站首页的静态网页

界面&#xff1a; 百度网盘 &#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1ZH3cmWRMsfQMPrCcKqXVmQ 提取码&#xff1a;8y1k 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦 转载于:https://www.cnblogs.com/huyangrong/p/10565518.html

SEO优化

众所周知&#xff0c;百度采取的是竞价排名&#xff1a;1.最关键的是给钱&#xff0c;钱越多&#xff0c;网站排名越靠前 2.是SEO优化&#xff0c;采取更加符合百度爬虫习惯的页面编写&#xff01; 通常中小型公司都拿不起这个钱来进行竞价排名&#xff0c;所以他们一般都会有一…

IIS 7.5 发布Web 网站步骤

1. 添加删除程序中&#xff0c;点击打开或关闭Window 功能 , 如图 &#xff0c; 勾选: 2. 打开 vs开发工具 控置台程序 &#xff0c; 注册 aspnet_regiis -i 3.设置应用程序域为指定版本 4.设置应用程序域 .Net Framework 版本 5. 设置应用程序域运行环境 转载于:https://www.c…

php 如何修改页面,【html网站模板代码】HTML页面如何嵌入PHP代码?如何修改免费网页模板的内容?...

【html网站模板代码】HTML页面如何嵌入PHP代码?如何修改免费网页模板的内容?下面就和小编一起来看看吧!HTML页面如何嵌入PHP代码?回答你的靠前个问题:事实上&#xff0c;文件名称不应该改为html或php&#xff0c;但是在在这个浏览器中&#xff0c;有一种方法可以输入html来执…

2017年最新15个漂亮的 HTML 摄影网站模板

摄影是一门艺术&#xff0c;它需要大量的耐心和努力工作来捕捉那些精彩的瞬间。如果你是一位热情的摄影师&#xff0c;想要建立一个网站来展示那些高质量的摄影作品&#xff0c;那么你找对地方了。本文包含15个最佳的摄影网站模板&#xff0c;你可以使用这些 HTML 模板创建自己…

网站嵌入虚拟试衣间方案问题

网站嵌入虚拟试衣间方案问题 好买衣虚拟试衣间目前只接入天猫和淘宝的店铺&#xff0c;只有手机版&#xff0c;不考虑跟其他平台合作。 衣(Yi)没有虚拟试衣功能&#xff0c;PK明星衣品功能可以提供API&#xff0c;虚拟试衣及服饰推荐可以具体沟通后提供定制化的服务&#xff08…

大型网站系统架构演化之路

前言 一个成熟的大型网站&#xff08;如淘宝、京东等&#xff09;的系统架构并不是开始设计就具备完整的高性能、高可用、安全等特性&#xff0c;它总是随着用户量 的增加&#xff0c;业务功能的扩展 逐渐演变完善的&#xff0c;在这个过程中&#xff0c;开发模式、技术架构、设…

瞬时响应:网站的高性能架构

什么叫高性能的网站&#xff1f; 两个网站性能架构设计方案&#xff1a;A方案和B方案&#xff0c;A方案在小于100个并发用户访问时&#xff0c;每个请求的响应时间是1秒&#xff0c;当并发请求达到200的时候&#xff0c;请求的响应时间将骤增到10秒。B方案不管是100个并发用户访…

OmniGraffle导入stencils的两个方法以及优质的stencils下载网站推荐

今天写论文&#xff0c;需要画几个电路结构图&#xff0c;可是现在是WannaCry勒索病毒正肆虐的时候&#xff0c;不想用教研室的win7啊&#xff01;&#xff08;其实只是想搞清楚mac下到底有没有visio那样好用的可以导入很多模版的画流程图结构图等的利器。。。&#xff09; 之前…

36氪上的这七家程序员网站你都了解吗?

2019独角兽企业重金招聘Python工程师标准>>> 我始终相信程序员交付的不是代码&#xff0c;是价值&#xff0c;所以在万众创新下程序员成了最受伤的群体&#xff0c;36氪上的好的项目举不胜举&#xff0c;但是真正为程序员服务的都有哪些呢&#xff1f;让我们一起来看…

如何发布一个网站

如何发布一个网站所需材料&#xff1a;网站空间&#xff08;服务器&#xff09;、域名、FTP软件、网站源程序步骤&#xff1a;1、首先购买空间、域名根据自己使用的编程语言来选择合适的操作系统。如网站使用ASP.net编写的&#xff0c;请选用Windows系列虚拟主机。使用PHP的&am…

谈谈个人网站的建立(二)—— lucene的使用

首先&#xff0c;帮忙点击一下我的网站http://www.wenzhihuai.com/ 。谢谢啊&#xff0c;如果可以&#xff0c;GitHub上麻烦给个star&#xff0c;以后面试能讲讲这个项目&#xff0c;GitHub地址https://github.com/Zephery/newblog 。 Lucene的整体架构 搜索引擎的几个重要概念…

网址导航类的网站为什么会没落

今天要谈论的话题是关于网址导航的&#xff0c;在我看来&#xff0c;其实这是一种已经没落的网站行业。目前还能生存下来的网址导航有hao123网址导航、2345网址导航&#xff0c;除此之外&#xff0c;还有很多互联网公司推出了适配自己产品的网址导航&#xff0c;例如搜狗网址导…