本文梗概:众所周知,浏览器可以通过 HTTP 请求的 Accpet 属性 来指定接收的内容类型。依靠这个技术,可以在不修改任何 HTML/CSS 或者图片的情况下,向浏览器提供优化的图片,从而降低带宽消耗,提高页面加载速度。

主要实现方式:

  • 图片压缩率更好,文件大小更小的 WebP 格式。
  • 服务器根据 HTTP 的 Accept 属性 来决定向浏览器发送哪种格式的图片
  • 利用一些图片转化技术,对支持的浏览器自动发送 WebP 图片,不支持的发送传统格式图片

介绍一些当下流行工具来检测网站的真实用户体验,并定位问题所在。

网站优化第一难题:图片!

开发者竭尽全力以减少 web 页面下载时间,实现更快的页面加载速度,办法无外乎删除 CSS/JS 代码中的空白符和注释,重命名变量等等。然而这些方法收效甚微,他们忽略了网页中的「大笨熊」:图片!

与图片文件相比,CSS/JS 代码简直小巫见大巫:

  • httparchive.org 数据显示,图片传输在平均网页传输中的占比达 60% 以上。
  • GigaOM reports 的统计则表明,2010 年 11 月到 2012 年 5 月间,网页大小增加了 50%,到 2015 年,网页平均大小达到 2MB。

与此同时,移动设备的使用量急剧增长,但是,它们面临着收费高昂且受限的宽带条件。我们需要调转船头,拥抱正确的未来!

真实的页面响应时间

评价网站性能好坏的一个主要指标就是页面响应时间,也就是说用户打开完整页面的时间。任何一项技术的使用都是有风险的,更何况是在公司的网站上,你必须要有一定的数据和证据来说服你的 Boss 或者相关负责人才行。

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

只有像类似于下图这样的针对用户访问时间的真实监控才能用来作为推动某项技术落地于网站的有力证据。

同样重要的是要定位到图片资源加载的时间,如果拖慢网站页面加载的主要原因就是图片资源的话,那就算你不抓紧的话,老板也会逼着你让你去解决这个问题,这个时候,WebP 就派上用场了。

之前做过前端优化的工作,国内外的前端性能优化工具也使用了不少,现阶段可以较好实现上面两个功能的工具有:

OneAPM Browser InsightAppDynamicsRuxit,大家有兴趣的话可以去尝试下。

页面优化首选策略:WebP 格式图片!

万幸,Google 等公司已经在积极行动以降低宽带消耗,他们带来了新的图片格式——WebP

WebP 能在减小文件大小的同时提供有损(JPEG)和无损(PNG)格式图片的支持。Google官方文件表明:

  • 无损压缩后的 WebP 图片可比 PNG 原图小 26%,有损压缩的 WebP 图片,在同等 SSIM 算法的情况下,比 JPEG 图像小 25-34%。
  • WebP 还支持无损透明度(也叫阿尔法通道),只需增加 22% 的额外字节。
  • 采用有损压缩时,WebP 也支持透明度,且如果红/绿/蓝通道支持有损压缩,可比PNG 图片缩小 3 倍。

Chrome 和 Opera 浏览器均支持 WebP 格式,Firefox 也在考虑当中,随着使用率的提高,宽带的优势愈发明显,WebP 可能会成为未来的网页图片标准。

然而,WebP 也引来一些质疑之声。对于平面设计师、网页设计师、和程序员来说,使用 WebP 时,如何避免手工处理过程,如何向不支持 WebP 的浏览器提供图片,如何更新以前对.jpg、.png 和 .gif 文件的引用,都是要解决的问题。

自动转换到 WebP!岂不妙哉!

现在大家应该了解了为什么 WebP 与众不同,为什么考虑在 Web 应用程序中使用它,下面介绍的是如何将你现有的图像转换为 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]
PageSpeed 自动转换模块

很高兴有工具可以手动将图像格式转换成 WebP

但正如我们之前看到的,并不是所有的浏览器都支持这种图像格式,因此需要一种可以预览 WebP 图像,并且使不支持 WebP 格式的浏览器可以用 JPEGs 或 PNGs 替代的服务。本来可以写一些复杂的服务器端代码,找出用户的浏览器是否支持 WebP 然后提供适当的文件,但幸运的是我们不需要这么做。

由谷歌开发的 PageSpeed 模块有一个功能,会自动将图像转换成 WebP 格式和服务端的浏览器所支持的格式。很神奇,就像魔术一样,而且设置也很简单,只需要将一行代码添加到你的主机配置中,启用这个特性。

ModPagespeedEnableFilters convert_jpeg_to_webp

:如果你不熟悉 PageSpeed 模块,可以看下这个英文的帮助文档,关于如何在 Apache Web 服务器上设置 mod_pagespeed.

使用 convert_jpeg_to_webp 选择器可以使 PageSpeed 模块在适当的地方开启图像优化和自动转换 WebP 图像的服务。最初这只适用于 JPEG 图像,但你也可以通过开启 convert_png_to_jpeg 选择器使其支持 png 图像。

ModPagespeedEnableFilters convert_png_to_jpeg

根据谷歌报导,目前有超过 300000 个网站使用 PageSpeed 模块(或服务)为用户提供 WebP 图像.

在自己的服务器上使用 PageSpeed 模块的方法非常简单,可以充分利用 WebP 的优势。

时下重点:Accept Header

其实很大程度上,WebP 在浏览器中的成功使用还是要归结于 HTTP 请求头中的 Accept 首部(accept header)。通常的浏览器请求都会包含软件平台、cookies、语言设置等信息,而从本文的讨论来讲,重点是Accept」首部——浏览器通过该首部告诉服务器,「这些是我能理解的文件类型」。

官方的 HTTP/1.1 协议早在多年前就已经解决了服务器驱动内容协商问题,但大多数浏览器还是忽视了 Accept 部分。

Ilya Grigorik, 作为谷歌 「 Make The Web Faster」团队的发起人,曾经总结过时下各种浏览器对于 Accept 的发送情况

可以看到,Opera 是唯一既展示 WebP 图片又官网表示接受 image/webp 内容类型的浏览器,Chrome 可以展示 WebP 图片,但是没有在 Accept 中说明。

好消息是,从 Chromium 的相关动作来看,image/webp 可能很快就将加入 Accpet 首部,毕竟 Chrome 的开发速度摆在那里。而也有很多用户在 Firefox 的 WebP support bug 中,提及了相关建议:「如果更新还包括修改 Accpet 中对于图片和 HTML 文件的声明,那就太好了!」之前 Firefox 在支持 PNG (在 Accept 首部中添加 image/png )时,也发布过类似的更新,估计加入 image/webp 时也会这么做。总的来说,Opera 已经支持 WebP ,Chrome 则会快步跟上,而 Mozilla 正在进一步了解当中。

确定用户比例

那么现在还有一个问题,你如何确定网站的用户有多大比例支持 WebP 呢?这个也同样需要拿出一定的数据来向 Boss 证明,转化 WebP 图像这个操作是有意义的。

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





这个要识别起来其实很难的,因为各种机型浏览器非常复杂,目前国内外涉及这个方面并且做的符合需求的工具也给大家推荐几个:

OneAPM Browser InsightAppDynamicsNewRelic

总结

近几年,互联网的爆发已经转变为「互联网+」的爆发,但同时每天也都有各种大小公司破产或者被兼并。在增加销售额的同时,从运营与增长的角度我们必须要考虑用户体验,所以,WebP 图片的流行必然是一个趋势,而我们要做的就是积极的去拥抱它。

另外,前几年很火的拨测很多情况下已经捉襟见肘了,找到一款合适的真实用户体验工具更是重要。希望本文可以在用户体验角度给大家以帮助。

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

本文转自 OneAPM 官方博客

网站页面优化必然趋势—WebP 图片!的更多相关文章

  1. 网站性能优化之CSS无图片技术:三角形

    1.使用CSS无图片技术,可以总结得到以下三个优点: 减少请求资源的大小: 减少http的请求个数: 提高可维护性. 一.CSS无图片技术,微博中有哪些实际应用呢? 通过上面的展示,我们可以看到,无图 ...

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

    谈到优化网站性能时,主要目标之一就是减少要发送到浏览器的数据量(即 payload).而当前,图片通常是页面构成中最耗费流量的部分,因此降低图片的大小是一个最为有效的优化网页前端性能的办法. 有很多工 ...

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

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

  4. 石火电光追风逐日|前端优化之次时代图片压缩格式WebP的项目级躬身实践(Python3 PIL+Nginx)

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_190 我们知道,在前端界有一个共识:速度就是生命,带宽就是金钱.怎样将页面加载速度有效提升是无数前端工程师无时不刻在思考的课题,目 ...

  5. webp图片优化

    根据对目前国内浏览器占比与 WebP 的兼容性分析,大约有 50% 以上的国内用户可以直接体验到 WebP,如果你的网站以图片为主,或者你的产品基于 Chromium 内核,建议体验尝试.假如你打算在 ...

  6. SEO 网站页面SEO优化之页面title标题优化

    在seo优化中,标题的优化占着举足轻重的地位,无论是从用户体验的角度出发,还是从搜索引擎的排名效果出发,title标题都是页面优化最最重要的因素.笔者总结了优化title标题应该注意的六个方面: ①. ...

  7. 前端页面优化:javascript图片延迟加载

    自己写了个简单的图片延迟加载小插件. 功能如下: 页面刷新,当前屏幕图片直接加载真实地址,body被卷去的部分和下方未显示的部分的img均加载通用图片如:loding.gif 随着屏幕上下滚动加载相应 ...

  8. 网站页面打开浏览器table中显示图片

    就类似博客园这种:

  9. 如何一步步把网站Retina优化

    随着高清屏幕.高分辨率屏幕越来越流行,例如MacBook Retina机型.iPad Air系列,这些新生机器有着很高的PPI,对网页的清晰度要求很高,所以越来越多的站长都不得不面临一个问题,那就是把 ...

随机推荐

  1. Linux环境下搭建Android开发环境

    最近在折腾linux.因为咱是搞安卓开发的,所以少不了需要搭建Android开发环境,就此小记,希望能给向我一样的开发者一点帮助!开干! 1.安装JDK 下载JDK包,得到的是类似于jdk-8u65- ...

  2. Java Interface and Abstraction

    本文引用资源申明: http://blog.csdn.net/xw13106209/article/details/6923556 http://www.cnblogs.com/dolphin0520 ...

  3. Spring、struts、webwork2三者MVC的比较

    http://blog.sina.com.cn/s/blog_4a69fa43010005il.html 在web应用方面,Spring有独立的MVC实现,与struts和webwork2相比毫不逊色 ...

  4. SQL语句一点小心得

    在Sqlserver中 if 语句后面的语句加begin end 括起来 问题:执行速度问题,在存储过程中没有加begin end 执行速度很慢,加了begin end执行速度加快 ALTER PRO ...

  5. @property在内存管理中的参数问题

    // // Created by wanghy on 15/8/14. // // /* retain : release旧值,retain新值(用于OC对象),要配合nonatomic使用. ass ...

  6. IOS 学习笔记 2015-04-15 Xcode 工程模板分类

    一 Application类型    我们大部分呢的开发工作都是使用Application类型的模板创建IOS程序开始的,该类型包括5个模板1 Master-Detail-Application    ...

  7. 深入理解Python中的生成器

    生成器(generator)概念 生成器不会把结果保存在一个系列中,而是保存生成器的状态,在每次进行迭代时返回一个值,直到遇到StopIteration异常结束. 生成器语法 生成器表达式: 通列表解 ...

  8. Python:如何得到Popen的输出?

    from:http://www.cnblogs.com/bluescorpio/archive/2010/05/04/1727020.html 最近在用subprocess中的Popen做个磁盘监控小 ...

  9. [python] virtualenv下解决matplotlib中文乱码

    1. 安装中文字体 一般系统自带wqy-microhei,其ttc文件位于/usr/share/fonts/truetype/wqy/wqy-microhei.ttc 2. 将ttc文件复制到pyth ...

  10. jQuery插件综合应用(一)注册

    一.介绍 注册和登录是每个稍微有点规模的网站就应该有的功能.登陆功能与注册功能类似,也比注册功能要简单些.所以本文就以注册来说明jQuery插件的应用. jQuery插件的使用非常简单,如果只按照jQ ...