前端性能优化系列 | 图像优化(上)

简介: 图片在各大网站随处可见,因为图片的表述比文字更加直观,所以图片是网站最重要的要素之一。图片相对其他文件又很大,页面的加载速度很大程度上取决于图片的加载速度,所以我们要对图片进行优化,以此加快页面加载速度,提升用户体验。图片的优化可以分为两个方面:图像的选取和使用,加载和显示。本文主要讨论从图片的选取和使用来进行性能的优化,下一篇文章来介绍图片的加载优化。

网络异常,图片无法展示
|


图片在各大网站随处可见,因为图片的表述比文字更加直观,所以图片是网站最重要的要素之一。图片相对其他文件又很大,页面的加载速度很大程度上取决于图片的加载速度,所以我们要对图片进行优化,以此加快页面加载速度,提升用户体验。


图片的优化可以分为两个方面:图像的选取和使用,加载和显示。本文主要讨论从图片的选取和使用来进行性能的优化,下一篇文章来介绍图片的加载优化。


1. 图像基础


图像资源优化的根本思想,可以归结为两个字:压缩。 无论是选取的图片的文件格式,还是针对同意格式压缩至更小的尺寸,其本质都是用更小的资源开销来完成图像的传输和展示。


在网页中,如果确定了图像的展示效果必须存在时,在前端实现上也并非要用图像文件,还存在一些场景可以使用更高效的方式来实现预期效果,比如以下情况:

  • 图像在不同状态下会有不用的展示效果(比如边角的裁切、阴影、渐变等),如果能用CSS来处理现实效果,用CSS实现即可,CSS代码相对于图片来讲,是可以忽略不计的;
  • 如果图像上有一些文字,允许的情况下,可以使用网页的文字来代替,因为图片中的文字包含了很多信息,会导致图片很大。除此之外,图像中的文本信息可能用户体验比较差(不能选择、搜索、缩放等),并且在高分辨率屏幕上,显示效果会大打折扣。

说完这两个例子,下面就来看一下图像相关的基础。


(1)矢量图和位图

图片文件可以分为矢量图和位图,下面我们就来看看这两种图片有什么不同。


1)矢量图 下面是百度百科中矢量图的定义:

矢量图,也称为面向对象的图像或绘图图像,在数学上定义为一系列由点连接的线。矢量文件中的图形元素称为对象。每个对象都是一个自成一体的实体,它具有颜色、形状、轮廓、大小和屏幕位置等属性。

矢量图适合如文本、LOGO、控件图标、二维码等构图形状比较简单的几何图形。


矢量图的优点如下:

  • 文件小,图像中保存的是线条和图块的信息,所以矢量图形文件与分辨率和图像大小无关,只与图像的复杂程度有关,图像文件所占的存储空间较小。
  • 图像可以无限级缩放,对图形进行缩放,旋转或变形操作时,图形不会产生锯齿效果。
  • 可采取高分辨率印刷,矢量图形文件可以在任何输出设备打印机上以打印或印刷的最高分辨率进行打印输出。

当然矢量图也是有缺点的:对细节的展示不够丰富,对很复杂的图像来说,要想达到预期的效果,图片可能会很大。


我们常用的SVG图片其实就属于矢量图,SVG是一种基于XML的图像格式,其全程是可缩放矢量图形(Scalable Vector Graphics,SVG),它是W3C推出的基于XML的二维矢量图形标准。SVG可以提供高质量的矢量图形渲染,同时由于支持JavaScript和文档对象模型,SVG图形通常具有强大的交互能力。另一方面,SVG作为W3C所推荐的基于XML的开放标准,能够与其他网络技术进行无缝集成。


目前,几乎所有的浏览器都支持SVG,iconfont上很多图标都是SVG格式:

网络异常,图片无法展示
|


SVG标签包含的部分就是该矢量图的全部内容,除了必要的绘制信息,可能还包括一些元数据,比如XML命名空间、图层及注释信息等,但是这些信息对浏览器绘制SVG来说并不重要,所以在使用前,可以使用工具将这些元数据来达到压缩的目的。


2)位图 位图图像(bitmap),亦称为点阵图像或栅格图像,是由称作像素(图片元素)的单个点组成的。这些点可以进行不同的排列和染色以构成图样。如果组成图像的栅格像素点越多且每个像素点所能表示的颜色范围越广,那么位图图像的显示效果就会越逼真,我们常用的图片多是属于位图。


虽然位图没有像矢量图那种不受分辨率影响的优质特性,但是对于复杂的图像却能提供较为真实的细节体验。


当我们放大位图时,可以看见赖以构成整个图像的无数单个方块,每个像素块储存的是图像颜色信息,位图颜色的编码主要有以下两种方式:

  • RGB:用红、绿、蓝三原色的光学强度来表示一种颜色。这是最常见的位图编码方法,可以直接用于屏幕显示。
  • CMYK:用青、品红、黄、黑四种颜料含量来表示一种颜色。常用的位图编码方法之一,可以直接用于彩色印刷。

通常浏览器会为每个颜色通道分配一个字节的储存空间,即28=256个色阶值。一张图片的大小与其包含的像素数成正比,图像包含的像素越多,所能展示的细节就越多,所能展示的细节就越丰富,同时图像就越大。处于对性能的考虑,在使用图像时必须考虑对图像进行压缩。


(2)分辨率

我们在书写CSS时,经常会为图像设置需要显示的长度像素值,但是在不同的设备屏幕上,有时相同的图像和位置,显示效果可能有比较大的差异,产生这种区别的主要原因是两种不同的分辨率:屏幕分辨率图像分辨率


  • 图像分辨率: 表示该图像文件包含的真实像素值信息,比如一张100 * 100像素分辨率的图像,它就定义了一个长宽各为100个像素点的信息。
  • 图像分辨率: 表示显示器设备所能显示的最大像素值,比如一台电脑的分辨率为2560 * 1600像素;


两种分辨率都用到了像素,那要他们的区别是什么呢?实际上,对于一张100 * 100像素分辨率的图像,它既可以在200 * 200像素分辨率的的屏幕上显示,也能在400 * 400像素分辨率的的屏幕上显示。在更高分辨率的设备上,有助于显示更加绚丽图片的显示,这其实很适合矢量图的显示,因为它不会以为放大而失真。而对于位图来说,只有图片文件包含更多的信息时,才能更充分的利用屏幕分辨率,如果再高分辨率的显示屏幕来显示图片信息不太多的位图图片,就会一定程度上失真。


为了能在不同分辨率情况下显示合适的图片,可以利用<img>标签以及它的srcset属性来提供图像的变体,该属性可以用来针对不同设备,提供不同分辨率的图像文件:

<img src="dog.png"
     alt="A picture of a dog"
     srcset="dog-2.png 2x,dog-3.png 3x,dog-4.png 4x">
复制代码


对于srcset属性,目前多数浏览器是支持的,浏览器在进行请求之前会先对此进行解析,只选择最合适的图像文件进行下载,如果浏览器不支持,需要在src属性中添加默认加载的图片。


(3)有损和无损压缩

压缩是降低源资源文件大小的重要方式,对于图像文件而言,由于人眼对于不同颜色的敏感度存在差异,所以可以通过减少某种颜色的编码的方式来减小文件的大小,甚至可以损失部分源文件信息,以达到近似的效果,压缩后的文件尺寸会更小。


那对于图像的压缩,应该采用有损压缩还是无损压缩呢?

  1. 首先确定业务素所要展示的图像的颜色阶数、图像显示的分辨率及清晰程度,当锚定了这几个参数的基准之后,如果获取的图像原文件的相应参数指标过高,就可以进行有损压缩,通过降低源文件质量来降低图像文件的大小。当然,如果业务要求的图像质量较高,可以直接进入第二步;
  2. 当确定了图片要展示的质量后,便可以使用无损压缩技术来尽可能降低图像的大小。


2. 图像格式


实际上,不同图片文件格式之间的区别,主要再约他们进行有损和无损压缩过程中使用的不同的算法,下面我们就来看看不同的图像文件的特点以及其使用场景。


(1)JEPG

JEPG是一种出现最早,使用范围最广的图片格式。它是一种有损压缩的格式,通过去除相关冗余图像和色彩数据等方式来获得更高的压缩率,同时还能展示出很丰富的图像内容。在不影响人眼可分别图片质量的前提下,尽可能的压缩了图片的大小。

JEPG在开发中经常作为背景图、轮播图等,来呈现色彩比较丰富的图片。但是由于是有损压缩,当处理LOGO或者图标等文件时,可能会出现边界模糊的不好体验,除此之外,JEPG图片是不支持透明度的。



相关文章
|
1天前
|
缓存 前端开发 UED
优化前端性能的六大技巧
在当今互联网高速发展的时代,优化前端性能是每个开发者都必须重视的任务。本文将介绍六大实用的技巧,帮助开发者提升前端应用的性能,提升用户体验。
|
3天前
|
存储 缓存 前端开发
前端如何利用indexDB进行数据优化
使用IndexedDB作为浏览器内置的客户端数据库,用于存储大量数据和实现离线支持。它能缓存常用数据,减少服务器请求,提高用户体验。IndexedDB支持数据索引、复杂查询及版本管理,允许离线操作并同步到服务器。但需熟悉其异步API,可借助Dexie.js、localForage等库简化使用。
|
5天前
|
机器学习/深度学习 前端开发 算法
使用机器学习优化前端用户体验
在当今高度竞争的互联网市场中,用户体验是至关重要的。本文将探讨如何利用机器学习技术来优化前端用户体验,从而提高用户满意度和留存率。我们将介绍如何利用机器学习算法分析用户行为数据,优化网站性能和内容推荐,以及如何实时调整界面设计和交互方式,从而实现个性化、智能化的用户体验。
|
6天前
|
前端开发 算法 JavaScript
如何优化前端性能:探索图片压缩与延迟加载技术
本文深入探讨了前端性能优化中的关键问题:图片压缩与延迟加载技术。通过介绍图片压缩的原理和方法,并结合实例说明了如何有效减少图片大小、提升加载速度;同时,详细解析了延迟加载技术的实现原理及其在提高页面加载性能中的作用,为前端开发者提供了实用的优化方案。
|
8天前
|
缓存 前端开发 JavaScript
如何优化前端网页加载速度:7个实用技巧
在当今互联网时代,网页加载速度对用户体验至关重要。本文将介绍7个实用的技巧,帮助前端开发者优化网页加载速度,提升用户体验。从压缩资源到异步加载,从图片优化到缓存策略,这些技巧将帮助你在前端开发中取得更好的效果。
|
16天前
|
前端开发 JavaScript UED
如何优化前端网页性能提升用户体验
本文将探讨如何通过一系列前端优化技术,提高网页加载速度、减少资源请求次数,从而优化用户体验。我们将介绍一些常用的性能优化技巧,包括资源压缩、懒加载、CDN 加速等方法,帮助开发者更好地构建高效、流畅的前端网页。
|
26天前
|
前端开发
前端性能优化:掌握解决方案
我们常说性能永远是第一需求,作为一个前端工程师,不管使用什么框架,不管从事什么类型的网站或应用开发,只要是项目被用户使用,性能优化就永远是你需要关注的问题。通常情况下,工程师们在深入了解前端技术的原理后,才能总结出性能优化的方案,需要多年经验的积累。前端技术日新月异,优秀的性能优化方案在近几年也层出不穷。本课程带你使用当今行业中非常前沿&专业的方案,解决前端性能优化问题。无论是为了解决工作中的实际问题,还是为了提升能力,这门课都能帮到你。
15 2
前端性能优化:掌握解决方案
|
26天前
|
机器学习/深度学习 前端开发 算法
利用机器学习优化Web前端性能的探索与实践
本文将介绍如何利用机器学习技术来优化Web前端性能,探讨机器学习在前端开发中的应用,以及通过实际案例展示机器学习算法对前端性能优化的效果。通过结合前端技术和机器学习,提升Web应用的用户体验和性能表现。
|
1月前
|
监控 前端开发 JavaScript
构建高性能Web应用:前端性能优化的关键策略与实践
本文将深入探讨前端性能优化的关键策略与实践,从资源加载、渲染优化、代码压缩等多个方面提供实用的优化建议。通过对前端性能优化的深入剖析,帮助开发者全面提升Web应用的用户体验和性能表现。
|
1月前
|
缓存 前端开发 JavaScript
前端性能优化实践:从理论到实际操作
【2月更文挑战第25天】在互联网高速发展的今天,用户对于网页加载速度的要求越来越高。作为前端开发者,我们不仅要关注页面的视觉效果,还要关注页面的性能。本文将从前端性能优化的理论出发,结合实际操作,为大家介绍一些实用的前端性能优化技巧。
32 6