前端性能优化之WebP
此文已由作者吴维伟授权网易云社区发布。
欢迎访问网易云社区,了解更多网易技术产品运营经验。
前端性能优化是一件很琐碎的事情。它不像其它很多技术,在确切有限的步骤下就可以把功能做好。它就像是在打扫屋子,需要时常去检查屋子是否有不整洁的地方,然后立即整理。所以在性能优化的过程中会遇到各方面的问题。本文的主题是聊聊怎么让图片更“整洁”。
什么是WebP
WebP是一种新的文件格式,相比于jpg、png、gif,在相同的图片质量的情况下,它有着更小的图片大小,可以大大缩小页面加载时间。可以参考http://isux.tencent.com/introduction-of-webp.html
如何生成WebP格式的图片
WebP官网上提供了转换工具,可以把jpg、png图片转换成WebP。
如何使用
由于WebP并没有被大多数浏览器原生支持,所以在使用时并不像jpg、png图片一样轻便。WebP的兼容方案一般分为3种:
1,服务器端判断是否应该返回WebP格式的图片
当服务器端接收到浏览器的图片请求时,根据User-Agent判断是否应该返回WebP格式的图片。这种方法的优势很明显,前端几乎不需要做任何修改就可以完美的完成此次优化任务。缺点也很明显,你需要恭敬地给后端大大倒上一杯咖啡,然后真诚地说:“加个功能呗,这个真的很简单!!!”
当然,这里有一个造好的轮子,你可以提供给后端大大。pagespeed,Google开发的一个支持Nginx和Apache的模块,主要用来提高页面加载速度。其中有一个功能convert_jpeg_to_webp,可以实现当支持WebP的浏览器请求图片时,可以自动将jpg等转换成WebP。pagespeed其它性能优化的功能也值得尝试哦~
2,浏览器判断是否应该使用WebP格式的图片
首先,你需要知道普通格式图片的URL和WebP格式图片的URL。通过浏览器特性侦测,来判断应该使用哪一类图片。这种方式的缺点是只适用于javascript动态生成的图片,无法统一处理CSS中引用的背景图片。
3,替浏览器写解析程序
我们要做的事情是,“你没有实现解析WebP的功能,那我来吧”。对于不支持WebP的浏览器,我们通过JavaScript将其转码成浏览器支持的格式,以base64的形式赋值给DOM元素。这个轮子已经被造好了,只需要简单的引入webpjs,就可以实现WebP的转码功能。这种方式能够处理所有的图片,包括Img标签和背景图片。不过由于是JavaScript实现转码,所以对页面性能有所影响。
侦测浏览器是否支持WebP
方法1,尝试加载一张WebP图片,观察是否能够正常加载
(function () { var WebP = new Image();
WebP.onload = WebP.onerror = function () { if (WebP.height != 2) { // 不支持WebP
} else { // 支持WebP
}
};
WebP.src = 'data:image/webp;base64,UklGRjoAAABXRUJQVlA4IC4AAACyAgCdASoCAAIALmk0mk0iIiIiIgBoSygABc6WWgAA/veff/0PP8bA//LwYAAA';
})();
方法2,尝试从canvas中导出WebP格式的图片,观察是否能够正常导出
function checkWebp() { try { return (document.createElement('canvas').toDataURL('image/webp').indexOf('data:image/webp') == 0);
} catch (err) { return false;
}
}
网易云免费体验馆,0成本体验20+款云产品!
更多网易技术、产品、运营经验分享请点击。
相关文章:
【推荐】 一些 ssh 小技巧
【推荐】 网易易盾验证码的安全策略
前端性能优化之WebP的更多相关文章
- 移动H5前端性能优化指南
移动H5前端性能优化指南 概述 1. PC优化手段在Mobile侧同样适用2. 在Mobile侧我们提出三秒种渲染完成首屏指标3. 基于第二点,首屏加载3秒完成或使用Loading4. 基于联通3G网 ...
- web前端性能优化指南(转)
web前端性能优化指南 概述 1. PC优化手段在Mobile侧同样适用2. 在Mobile侧我们提出三秒种渲染完成首屏指标3. 基于第二点,首屏加载3秒完成或使用Loading4. 基于联通3G网络 ...
- 移动H5前端性能优化指南(转载)
移动H5前端性能优化指南 概述 1. PC优化手段在Mobile侧同样适用2. 在Mobile侧我们提出三秒种渲染完成首屏指标3. 基于第二点,首屏加载3秒完成或使用Loading4. 基于联通3G网 ...
- web前端性能优化指南
web前端性能优化指南 web前端性能优化指南 概述 1. PC优化手段在Mobile侧同样适用2. 在Mobile侧我们提出三秒种渲染完成首屏指标3. 基于第二点,首屏加载3秒完成或使用Loadin ...
- 移动H5前端性能优化指南[转]
移动H5前端性能优化指南 米随随2015.01.23 移动H5前端性能优化指南 概述 1. PC优化手段在Mobile侧同样适用2. 在Mobile侧我们提出三秒种渲染完成首屏指标3. 基于第二点,首 ...
- 移动 H5(PC Web)前端性能优化指南
原文地址https://zhuanlan.zhihu.com/p/25176904?utm_source=wechat_session&utm_medium=social&utm_me ...
- 第146天:移动H5前端性能优化
移动H5前端性能优化 一.概述 1. PC优化手段在Mobile侧同样适用 2. 在Mobile侧我们提出三秒种渲染完成首屏指标 3. 基于第二点,首屏加载3秒完成或使用Loading 4. 基于联通 ...
- [转]移动H5前端性能优化指南
移动H5前端性能优化指南 概述 1. PC优化手段在Mobile侧同样适用2. 在Mobile侧我们提出三秒种渲染完成首屏指标3. 基于第二点,首屏加载3秒完成或使用Loading4. 基于联通3G网 ...
- 前端性能优化之利用 Chrome Dev Tools 进行页面性能分析
背景 我们经常使用 Chrome Dev Tools 来开发调试,但是很少知道怎么利用它来分析页面性能,这篇文章,我将详细说明怎样利用 Chrome Dev Tools 进行页面性能分析及性能报告数据 ...
随机推荐
- vs2010 静态使用 opencv 2.46 库
下载opencv2.46的库,假设解压到OpenCV246,设置如下: 在工程的c++的include目录下添加:OpenCV246\opencv\build\include 在工程的c++的lib目 ...
- poj 1236+hdu2767 有向图 缩点+看度数(tarjan)
1236题意:一个有向图,1,求至少从几个点出发可以遍历该图,2:,求至少添加多少边,使强连通.而,HDU的只有后面一问. 解;先缩点,第一问只需找所有入度为0的点即可.,第2问,max(入度为0的点 ...
- httpclient自动执行http的302重定向
今天debug过程中发现,httpclient会自动执行302的重定向,但是这个的前提是第一个请求是get发出的.我测试发现用post的后的302是系统不会自动redirect的..不知道到底正确不, ...
- Linux下使用Curl调用Java的WebService接口
其实只要是标准的WSDL的SOA接口WebService都可以用. 调用方式: 注意:上面的方式不包括加密或者登录的,其实SOA有一套完整的加密方式. curl -H'Content-Type: te ...
- MatConvNet 练习使用CNN
首先在 VGG Convolutional Neural Networks Practical 官网上做了四个练习.现在代码可以直接用 但是在using pretrained models中有个错,n ...
- 【APUE】线程与信号
每个线程都有自己的信号屏蔽字,但是信号的处理是进程中所有线程共享的.进程中的信号是递送到单个线程的. 线程中pthread_sigmask函数类似与进程的sigprocmask函数,可以用来阻塞信号. ...
- XMLHttpRequest对象解读
<!DOCTYPE html> <html> <body> <script> function reqListener () { console.log ...
- 白话空间统计之四:P值和Z值(上):零如果
本来今天想要讲讲软件操作的,后来发现好像还有好几个重要的指标没有说,干脆等所有说完在讲操作吧.否则操作出来的结果会发现大量的"不明觉厉". 首先是空间统计里面非常神奇的两个值:P值 ...
- python05-09
一.lambda表达式 def f1(): return 123 f2 = lambda : 123 def f3 = (a1,a2): return a1+a2 f4 = lambda a1,a2 ...
- hdu1576 mod 运算的逆元
Problem Description 要求(A/B)%9973,但因为A非常大,我们仅仅给出n(n=A%9973)(我们给定的A必能被B整除.且gcd(B,9973) = 1). Input 数 ...