丽珍源|web前端开发(web_qdkf)很多人认为前端性能优化很难,好像是大牛级别的人才能完成的工作。其实并没有大家想象的那么难,前端性能优化是每个前端开发者都需要学习和掌握的技能。关于前端性能优化的讨论从前端诞生,或者说web出现的时候就已经存在了。只是之前我们关注的比较少,但是随着互联网的发展,用户的需求也发生了变化,所以对前端性能的关注度也提高了。那么今天我们就从最简单的前端性能优化图片优化开始,再一步步进入前端性能优化的其他要点。01.图像压缩概述说到图像性能优化,就不得不提到图像压缩。图像压缩可以减少图像数据中的冗余信息,从而以更高效的格式存储和传输数据。那么,前端训练和开发中常见的静态图片格式有哪些,是否都进行了图片压缩呢?从上图中,我们引入了两个概念,有损压缩和无损压缩。简单来说,无损压缩不会造成图像失真;有损压缩是指丢失某些图像信息以换取更小的图像信息,肉眼可能无法识别。那么,为什么会有有损压缩和无损压缩呢?图片压缩的过程是怎样的?什么场景应该使用什么图像格式?作为一个前端开发者,如果你了解了这些,一定会对你的项目性能有很大的提升。02.图片实例分析我们先用一个格式转换工具来对比一下这些图片在转换前后的大小变化。从图中我们可以看出,65k的jpg转为png后变成了原来的4.x倍,转为webp后变成了不到一半大小。直观上我们可以看出webp的压缩率是最高的。从webp使用的一些算法可以知道,webp不仅压缩率高,解码速度快,支持alpha透明,还有肉眼难以识别的图像质量差异等优点。在一些需要较大压缩比的场景下面广泛使用。这是否意味着jpg和png没有用?很明显不是。jpg的兼容性比webp好很多。webp目前支持最好的是chrome浏览器,因为它本身就是google推出的图片格式。此外,它与安卓系统的兼容性也很好。所以在ios开发等场景下,jpg是比webp更好的选择。png呢?因为jpg不支持透明图片,webp在某些场景下不兼容。这时候png就派上用场了。基于以上理论,我们来看看各大厂是如何使用的。看一个我们常用的APP,打开淘宝,打开chrome开发者工具。正如我们所看到的,有一堆特殊的图片。如下图所示:我们右键菜单,选择Openinnewtap。然后我们会看到一张webp图片,去掉第二个.jpg后面的字符串,再次打开jpg图片。那么,你为什么要这样做?显然,在android上,它可以很好的兼容webp格式的图片,所以我们首先要选择它。如果遇到不兼容的场景,降级,图片会以jpg格式加载。不知道这样使用的童鞋有没有学习的感觉呢?学习不如应用。以后的项目中,如果有合适的场景,也可以用这个方法~03。特殊格式svg因为svg不是上面说的有损和无损压缩,它是由tags代码显示的,可以任意缩放,不会损失图像质量。让我们看一下它的外观。上图左边的暂停图标用右边红框里的一段代码表示。比如图中,浏览器会将右边的一串代码渲染成左边的图案。那么,对这些图像使用此代码而不是jpg有什么好处呢?看到这里可以切到手机淘宝的图片看,那些资源文件都是通过http请求获取的。对于我们的svg图像,不需要它。当加载只有几KB大小的图片时,http网络请求时间成为图片加载速度的瓶颈。我们花了一小段代码,通过消除http请求带来了很大的性能提升。但是svg目前只支持比较简单的图标。当然svg还有其他的优点,这里就不一一列举啦~04.4种格式图片的统一对比通过以上表格的对比,你对不同图片格式的理解更直观了吗?05.补充总结其实除了上面提到的svg可以减少小图片带来的http请求耗时之外,cssSprite也可以。CSSSprite,也就是我们常说的Sprite技术,将多个小图标和背景图片组合成一张图片,利用CSS背景定位来显示图片中需要显示的部分。上面说了,如果在一张图片上放置多个小图标,显然,这多个图标只需要1次http请求。不过在使用的时候也要注意,不要把一堆小图标放在一起组成精灵图,因为一旦不加载图片,你的网站就会到处都是空白。
